记录一个自己犯得错误,一定记住要前后端file名字对应上!
原后端代码
java
@RestController
@RequestMapping("/upload")
public class UploadFileController {
@PostMapping
public Result upload(MultipartFile multipartFile) throws IOException {
System.out.println("hhh"+multipartFile);
// 原始文件名
String originFileName = multipartFile.getOriginalFilename();
// 名字重组
String filename = UUID.randomUUID().toString().substring(1, 6) + originFileName.substring(originFileName.lastIndexOf("."));
// 使用阿里云工具类上传,返回一个url地址
String url = AliOssUtil.uploadFile(filename, multipartFile.getInputStream());
return Result.success(url);
}
}
原前端组件代码
java
<el-col :span="8">
<el-upload class="avatar-uploader" :show-file-list="false" :auto-upload="true" action="/api/upload"
name="file" :headers="{ 'Authorization': tokenStore.token }" :on-success="uploadSuccess">
<img v-if="imgUrl" :src="imgUrl" class="avatar" />
<img v-else src="@/assets/avatar.jpg" width="150px" height="150px" />
</el-upload>
</el-col>
由于自己写的时候没注意到,·< el-upload> ·组件这里的name属性已经复制了名字为"file",也就是我们上传文件后,文件给后端时候,名字是file,后端要去拿这个文件的话,就会使用的MultipartFile,后端这里必须也是file名字命名。
所以前后端只要file名字一致即可
方法一、@RequestParam("file")注解明确前端名字file
java
public Result upload(@RequestParam("file") MultipartFile multipartFile) throws IOException
方法二、 不用获取前端信息的注解,将MultipartFile对象名字为file也是可以的
java
public Result upload(MultipartFile file) throws IOException
记录一下MultipartFile 的知识点
MultipartFile 它是 Spring Framework 提供的一个接口,用于表示通过 HTTP 请求上传的文件数据。MultipartFile 接口提供了一些常用的方法,用于获取文件的相关信息和操作文件数据。以下是一些常用的方法:
- getOriginalFilename():获取上传文件的原始文件名。
- getBytes():将文件内容作为字节数组返回。
- getSize():获取文件的大小。
- getInputStream():获取文件内容的输入流。
- transferTo(File dest):将上传的文件保存到指定的目标文件中。