写一个java根据本地文件路径下载到指定的文件夹中的前后端
时间: 2024-03-27 18:37:47 浏览: 70
前端部分:
在前端页面中,需要提供文件下载的按钮或链接,例如:
```html
<a href="#" onclick="downloadFile()">下载文件</a>
```
其中,`downloadFile()`函数是用来触发文件下载的,具体实现如下:
```javascript
function downloadFile() {
// 定义文件路径和文件名
let filePath = "/path/to/file.txt";
let fileName = "file.txt";
// 发送 GET 请求,获取文件内容
axios.get(filePath, { responseType: "blob" }).then(response => {
// 将文件内容转换为 Blob 对象,创建下载链接
let blob = new Blob([response.data]);
let url = URL.createObjectURL(blob);
// 创建 a 标签,模拟点击下载链接
let a = document.createElement("a");
a.href = url;
a.download = fileName;
a.click();
// 释放 Blob 对象和 URL
URL.revokeObjectURL(url);
});
}
```
其中,`axios` 是一个基于 Promise 的 HTTP 库,可以用来发送 GET 请求。`responseType: "blob"` 表示返回的数据是二进制数据。
后端部分:
后端需要提供一个接口,用来返回指定文件的内容,例如:
```java
@GetMapping("/file")
public ResponseEntity<byte[]> downloadFile() {
// 定义文件路径和文件名
String filePath = "/path/to/file.txt";
String fileName = "file.txt";
// 读取文件内容
File file = new File(filePath);
byte[] content = new byte[(int) file.length()];
try (FileInputStream fis = new FileInputStream(file)) {
fis.read(content);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
// 设置响应头,告知浏览器下载文件
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
// 返回文件内容
return new ResponseEntity<>(content, headers, HttpStatus.OK);
}
```
其中,`@GetMapping("/file")` 表示该接口处理 GET 请求,并且路径为 `/file`。`MediaType.APPLICATION_OCTET_STREAM` 表示返回的数据是二进制数据。`headers.setContentDispositionFormData("attachment", fileName)` 表示告知浏览器下载文件,并且指定文件名为 `fileName`。
需要注意的是,在实际开发中,需要根据具体的业务需求来调整代码。例如,可以根据用户的身份验证来限制文件的下载权限,可以在下载文件之前先进行下载速度等方面的限制,等等。
阅读全文