springboot+vue+elementUI实现文件下载
时间: 2023-09-11 19:04:04 浏览: 137
1. 后端实现文件下载
在Spring Boot中,我们可以使用以下代码实现文件下载:
```java
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile() throws IOException {
Resource resource = new UrlResource("file:/path/to/file");
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
return ResponseEntity.ok().headers(headers).contentLength(resource.contentLength()).contentType(MediaType.APPLICATION_OCTET_STREAM).body(resource);
}
```
其中,`UrlResource`是Spring提供的获取文件资源的类,`HttpHeaders.CONTENT_DISPOSITION`设置文件下载方式为附件,`MediaType.APPLICATION_OCTET_STREAM`指定文件类型为二进制流。
2. 前端实现文件下载
在Vue中,我们可以使用Element UI中的`el-button`组件来实现文件下载:
```html
<el-button type="primary" icon="el-icon-download" @click="downloadFile">下载文件</el-button>
```
在Vue组件中,我们需要定义`downloadFile`方法来实现文件下载:
```javascript
downloadFile() {
window.location.href = '/download';
}
```
其中,`window.location.href`将页面重定向到下载链接,即后端实现的文件下载接口。
需要注意的是,如果需要传递参数给后端,可以使用axios或者fetch来发送GET或POST请求,将参数传递给后端,再在后端实现文件下载。具体实现方法可以参考以下代码:
```javascript
downloadFile() {
axios.get('/download', {
params: {
filename: 'example.txt'
},
responseType: 'blob'
}).then(response => {
const blob = new Blob([response.data], {type: 'application/octet-stream'})
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = 'example.txt'
link.click()
window.URL.revokeObjectURL(url)
})
}
```
在这个例子中,我们使用了axios来发送GET请求,`params`中传递了参数filename,`responseType`设置返回类型为二进制流。在请求成功后,我们将返回的数据转换为Blob对象,通过URL.createObjectURL方法生成下载链接,然后创建一个a标签并设置download属性,模拟点击a标签来下载文件。最后使用URL.revokeObjectURL方法释放资源。
阅读全文