使用springboot作后端,vue3作前端,现在想要实现vue3中通过el-upload从服务器中获取文件,并显示出来,该怎么做呢
时间: 2024-09-20 21:08:34 浏览: 34
vue+axios+el-upload实现文件上传(带参数):
3星 · 编辑精心推荐
要在使用Spring Boot后端和Vue3前端的应用中实现文件上传以及展示功能,你可以按照以下步骤操作:
1. **Vue3前端部分:**
- 安装依赖:在Vue3项目中安装Element UI (el-upload) 和 axios,如果还没有安装,可以用以下命令:
```bash
npm install element- 在组件中导入组件和库:
```html
<template>
<el-upload :action="uploadUrl"
ref="upload"
:on-success="handleSuccess"
:file-list="fileList">
<i class="el-icon-plus"></i> Click to Upload
</el-upload>
<!-- 用于显示图片 -->
<img v-if="imageUrl" :src="imageUrl" alt="File Preview">
</template>
```
- 设置`uploadUrl`到后端提供的接收文件的API路径,`handleSuccess`函数用于接收后端返回的新文件信息。
2. **Vue3脚本部分:**
```js
import { ref, onMounted } from 'vue';
export default {
data() {
return {
uploadUrl: '',
fileList: [],
imageUrl: '', // 存储预览图地址
};
},
methods: {
handleSuccess(response) {
this.fileList.push(response.data); // 后台返回新的文件信息
if (response.data.url) {
this.imageUrl = response.data.url;
}
},
handleUpload(file) {
const formData = new FormData();
formData.append('file', file);
axios.post(this.uploadUrl, formData)
.then(res => this.handleSuccess(res))
.catch(err => console.error(err));
},
},
mounted() {
// 可能在初始化时就有一个默认的文件列表或预加载图片
// 这里假设`initData`是从后端获取的数据
onMounted(() => {
this.fileList = initData || [];
if (initData && imageData) {
this.imageUrl = imageData;
}
});
},
};
```
3. **Spring Boot后端部分:**
- 创建一个POST API,接受文件数据,存储到数据库,并返回文件相关信息(如URL)给前端。
```java
@PostMapping("/api/upload")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
// 处理文件上传,存储到数据库,然后生成一个新的URL
FileEntity fileEntity = saveFileToDatabase(file);
String imageUrl = generateImageUrl(fileEntity);
return ResponseEntity.ok(imageUrl);
}
```
阅读全文