文件存放在images.path路径下
- package com.like.common;
-
- import jakarta.servlet.ServletOutputStream;
- import jakarta.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.util.UUID;
-
- /**
- * 本地文件上传下载
- */
- @RestController
- @RequestMapping("/common")
- @CrossOrigin
- public class CommonController {
- @Value("${images.path}")
- private String basePath;
-
- /**
- * 文件上传
- * @param file
- * @return
- */
- @PostMapping("/upload")
- public CommonDto<String> upload(MultipartFile file){
- //原始文件名
- String originalFilename = file.getOriginalFilename();
- String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
- //使用UUID重新生成一个文件名,防止文件名重复,造成文件覆盖
- String fileName = UUID.randomUUID().toString() + suffix;
- //创建一个目录
- File dir = new File(basePath);
- //判断当前目录是否存在
- if(!dir.exists()){
- //如果目录不存在就直接创建
- dir.mkdirs();
- }
- try {
- //将临时文件转存到指定位置
- file.transferTo(new File(basePath + fileName));
- } catch (IOException e) {
- e.printStackTrace();
- }
- CommonDto<String> commonDto = new CommonDto<>();
- commonDto.setContent(fileName);
- return commonDto;
- }
-
-
- /**
- * 文件下载接口
- */
- @GetMapping("/download")
- public void download(String name, HttpServletResponse response){
- try {
- //输入流,通过输入流读取文件内容
- FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
- //输出流 通过输出流将文件返回给浏览器,在浏览器中展示图片
- ServletOutputStream outputStream = response.getOutputStream();
- response.setContentType("/image/jpeg");
- int len = 0;
- byte[] bytes = new byte[1024];
- while((len = fileInputStream.read(bytes))!=-1){
- outputStream.write(bytes,0,len);
- outputStream.flush();
- }
- //关闭资源
- outputStream.close();
- fileInputStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
表格元素里面添加如下代码
- <el-table-column label="头像">
- <template slot-scope="scope">
- <el-popover
- placement="top-start"
- trigger="hover">
- <img :src="scope.row.avatar" style="width: 150px; height: 150px;">
- <img :src="scope.row.avatar" slot="reference" style="width: 50px; height: 50px;">
- </el-popover>
- </template>
- </el-table-column>
新增和修改表单里添加如下代码
- <!-- 头像-->
- <el-form-item label="头像" :label-width="formLabelWidth" prop="avatar">
- <el-upload
- class="avatar-uploader"
- action="http://localhost:3333/common/upload?module=avatar"
- :show-file-list="false"
- :on-success="handleAvatarSuccess">
- <img v-if="form.avatar" :src="form.avatar" class="avatar">
- <i v-else class="el-icon-plus avatar-uploader-icon"></i>
- </el-upload>
- </el-form-item>
methods里写handleAvatarSuccess逻辑
- handleAvatarSuccess(res, file) {
- this.form.avatar = `http://localhost:3333/common/download?name=${res.content}`
- //手动触发一头像字段的校验
- this.$refs.foreName.validateField('avatar');
-
- //强制刷新
- this.$forceUpdate();
- },


至此整个项目的开发工作全部完结