Vue与SpringBoot实现文件上传及下载教程
版权申诉
20 浏览量
更新于2024-08-25
收藏 107KB PDF 举报
该资源主要介绍了如何在Vue.js前端与Spring Boot后端之间实现文件上传和下载的功能。文章提到了两个关键部分:Vue.js的文件选择和上传逻辑,以及Spring Boot后端处理文件上传的接口。
(一)、上传文件
在Vue.js中,通过HTML的`<input type="file">`元素可以实现文件的选择。为了支持单个或多个文件的选择,以及整个文件夹的选择,有两个不同的`<input>`标签被使用。第一个`<input>`标签允许用户选择多个文件,而第二个`<input>`通过添加`webkitdirectory`和`mozdirectory`属性,使得用户可以选择一个文件夹。当文件选择完成后,`getFiles`方法会被触发,将选定的文件添加到Vue实例的数据属性`files`中。
```html
<template>
<input @change="getFiles($event)" style="width:220px" name="files" type="file" multiple="multiple"/>
<input @change="getFiles($event)" style="width:220px" name="files" type="file" webkitdirectory mozdirectory/>
<el-button @click="uploadFile" type="submit">上传</el-button>
</template>
```
`getFiles`方法遍历选定的文件,并将其存储在`files`数组中。然后,`uploadFile`方法负责将文件数据封装到`FormData`对象中,每个文件作为`files`字段的键值对添加,最后通过调用`upload`函数(这里假设是发送HTTP请求的函数)将文件发送到后端。
```javascript
data() {
methods: {
getFiles(event) {
var files = event.target.files;
for (var i = 0; i < files.length; i++) {
this.files.push(files[i]);
}
},
uploadFile() {
var formData = new FormData();
for (var i = 0; i < this.files.length; i++) {
formData.append('files', this.files[i]);
}
// 调用上传文件接口
upload(formData).then(response => {
if (response.code === 200) {
this.msgSuccess("上传成功!");
}
})
},
}
}
```
对于后端,Spring Boot提供了处理文件上传的API。通常,你需要创建一个Controller方法,使用`MultipartFile`参数来接收上传的文件。例如:
```java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@PostMapping("/upload")
public ResponseEntity<String> handleFileUpload(@RequestParam("files") MultipartFile[] files) {
// 处理文件上传逻辑
// ...
return ResponseEntity.ok("文件上传成功");
}
```
(二)、下载文件
在Spring Boot后端,一旦文件被保存在服务器上,你可以创建一个Controller方法来提供文件的下载。这个方法通常会返回一个`ResponseEntity`,包含文件的内容和适当的HTTP头,如`Content-Disposition`来指示浏览器以下载方式打开文件。
```java
@GetMapping("/download")
public ResponseEntity<InputStreamResource> downloadFile(String fileName) {
// 获取文件并转换为InputStreamResource
InputStreamResource resource = getFileFromServer(fileName);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"")
.body(resource);
}
```
在Vue.js前端,可以使用`axios`或`fetch`等库来发起一个GET请求,获取文件并触发浏览器的下载。例如:
```javascript
axios.get('/download', {
responseType: 'blob', // important
}).then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
});
```
总结来说,该资源涵盖了Vue.js前端和Spring Boot后端之间文件上传与下载的基本实现步骤,对于开发涉及文件操作的应用非常有帮助。在实际项目中,还需要考虑错误处理、权限验证、文件大小限制、存储策略等其他细节。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-12-01 上传
2021-12-01 上传
2021-12-04 上传
2021-12-01 上传
2021-12-04 上传
2021-12-05 上传
一诺网络技术
- 粉丝: 0
- 资源: 2万+
最新资源
- kissy-xtemplate:用于 KISSY 的独立 XTemplate 编译器
- Yuki
- LockWebPageDriver-master,抖音跳舞代码源码c语言,c语言
- 国际长途酒店机票预订网站模板
- saliengame_idler:2018年Steam Summer'Salien'Minigame的Javascript惰轮
- micronaut-hibernate-validator:与用于Micronaut的Hibernate Validator集成
- winecode
- 随机信号发生器实验室1
- thafas,文字冒险游戏c语言源码,c语言
- 基于JAVA图书馆预约占座系统计算机毕业设计源码+数据库+lw文档+系统+部署
- rg-mobile:RG手机
- Twitter_react
- LojaXXI
- zgxh,保龄球计分的c语言源码,c语言
- amanjain252002.github.io
- Interpolation:切比雪夫插值法。-matlab开发