10. Springboot3+vue3实现文件上传和下载 – 朝汐の小站
10. Springboot3+vue3实现文件上传和下载
本文最后更新于 285 天前,如有错误请邮件至 zhiligyi222na@gmail.com

文件下载

controller/FileController

/**
 * 文件下载接口
 * 下载路径:“http://localhost:9999/files/download/404.png”
 */
@GetMapping("/download/{fileName}")
public void download(@PathVariable String fileName, HttpServletResponse response) throws Exception {
    //找到文件的位置
    String filePath = System.getProperty("user.dir") + "/files/";  //获取到当前项目的根路径
    String realPath = filePath + fileName;  //最终路径
    boolean exist = FileUtil.exist(realPath);
    if (!exist) {
        throw new CustomerException("文件不存在");
    }
    // 读取文件的字节流
    byte[] bytes = FileUtil.readBytes(realPath);
    ServletOutputStream os = response.getOutputStream();
    // 输出流对象把文件写出到客户端
    os.write(bytes);
    os.flush();
    os.close();
}

接口放行,不鉴权

文件上传

/**
 * 文件上传接口
 */
@PostMapping("/upload")
public Result upload(@RequestParam("file") MultipartFile file) throws Exception {
    //找到文件的位置
    String filePath = System.getProperty("user.dir") + "/files/";  //获取到当前项目的根路径
    if (!FileUtil.isDirectory(filePath)) {
        FileUtil.mkdir(filePath);
    }
    byte[] bytes = file.getBytes();
    String fileName = System.currentTimeMillis() + "_" + file.getOriginalFilename();  //文件的原始名称
    // 写入文件
    FileUtil.writeBytes(bytes, filePath + fileName);
    String url = "http://localhost:9999/files/download/" + fileName;
    return Result.success(url);
}

使用 apipost 测试文件上传

在数据库表 admin 和 user 里面加上 avatar 字段

CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `username` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '账号',
  `password` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',
  `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
  `phone` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
  `role` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色',
  `avatar` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username_index` (`username`) USING BTREE COMMENT '账号'
) ENGINE=MyISAM AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员信息';

在实体类里添加 avatar 私有成员变量和相应的get、set方法

注意在 Mapper.xml 里面加上 avatar 的sql

前端对接文件上传和下载

文件上传到数据库是存储的一串 URL 链接的字符串

表单上传

<el-form-item prop="avatar" label="头像" >
  <el-upload
      action="http://localhost:9999/files/upload"
      :headers="{ token: data.user.token }"
      :on-success="handleFileSuccess"
      list-type="picture"
  >
    <el-button type="primary">上传头像</el-button>
  </el-upload>
</el-form-item>

const handleFileSuccess = (res) => {
  data.form.avatar = res.data
}

表格显示图片

<el-table-column label="头像" >
  <template #default="scope">
    <el-image v-if="scope.row.avatar" :src="scope.row.avatar" :preview-src-list="[scope.row.avatar]" :preview-teleported="true"
              style="width: 40px; height: 40px; border-radius: 50%; display: block"/>
  </template>
</el-table-column>

图片预览效果不理想,加上属性 :preview-teleported=”true

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇