JAVA + vue 实现各种类型文件上传和下载
时间: 2024-12-26 11:28:32 浏览: 12
在Java中配合Vue.js实现文件上传和下载,通常涉及到前端的HTML、JavaScript以及后端的Java处理。以下是基本步骤:
**前端部分 (Vue.js)**:
1. 使用`<input type="file">` HTML元素让用户选择文件,利用`axios`或`vue-resource`这样的库发送异步请求到服务器。
```html
<input type="file" @change="uploadFile">
```
2. `uploadFile`函数封装了文件上传的逻辑,可以使用FormData对象将文件转换为可以发送的数据:
```javascript
methods: {
uploadFile(e) {
const file = e.target.files[0];
this.$axios.post('/api/upload', new FormData(), { headers: { 'Content-Type': 'multipart/form-data' } }).then(response => {
// 文件上传成功,处理响应数据
});
}
}
```
**后端部分 (Java)**:
1. 使用Spring Boot创建RESTful API来接收文件上传请求,如`@PostMapping("/api/upload")`。
2. 使用MultipartFile对象从请求体中获取文件,并保存到服务器的特定目录:
```java
@PostMapping("/api/upload")
public ResponseEntity<String> handleUpload(@RequestParam("file") MultipartFile file) {
try {
// 检查文件是否为空,大小等
saveToFile(file);
return ResponseEntity.ok("文件已上传");
} catch (Exception ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("上传失败:" + ex.getMessage());
}
}
```
3. 对于文件下载,可以提供一个类似`@GetMapping("/api/download/{filename}")`的API,返回下载链接或直接读取文件内容并设置响应头:
```java
@GetMapping("/api/download/{filename}")
public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String filename) {
InputStream inputStream = ...; // 从存储位置加载文件流
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"");
return ResponseEntity.ok(new InputStreamResource(inputStream)).headers(headers);
}
```
**相关问题--:**
1. Java后端如何处理大文件上传以防止内存溢出?
2. Vue.js如何显示上传进度条?
3. 如何在用户取消上传或网络中断时优雅地处理文件上传请求?
阅读全文