一、整合上传组件

参考 http://element-cn.eleme.io/#/zh-CN/component/upload 用户头像上传

1、上传默认封面

创建文件夹cover,上传默认的课程封面
图片.png

2、定义默认封面

  1. const defaultForm = {
  2. ......,
  3. cover: process.env.OSS_PATH + '/cover/default.gif',
  4. ......
  5. }

3、定义data数据

  1. BASE_API: process.env.BASE_API // 接口API地址

4、组件模板

在info.vue中添加上传组件模板

  1. <!-- 课程封面-->
  2. <el-form-item label="课程封面">
  3. <el-upload
  4. :show-file-list="false"
  5. :on-success="handleAvatarSuccess"
  6. :before-upload="beforeAvatarUpload"
  7. :action="BASE_API+'/admin/oss/file/upload?host=cover'"
  8. class="avatar-uploader">
  9. <img :src="courseInfo.cover">
  10. </el-upload>
  11. </el-form-item>

5、结果回调

  1. handleAvatarSuccess(res, file) {
  2. console.log(res)// 上传响应
  3. console.log(URL.createObjectURL(file.raw))// base64编码
  4. this.courseInfo.cover = res.data.url
  5. },
  6. beforeAvatarUpload(file) {
  7. const isJPG = file.type === 'image/jpeg'
  8. const isLt2M = file.size / 1024 / 1024 < 2
  9. if (!isJPG) {
  10. this.$message.error('上传头像图片只能是 JPG 格式!')
  11. }
  12. if (!isLt2M) {
  13. this.$message.error('上传头像图片大小不能超过 2MB!')
  14. }
  15. return isJPG && isLt2M
  16. }

二、修改后端api

1、修改上传controller

添加host可选参数

  1. /**
  2. * 文件上传
  3. *
  4. * @param file
  5. */
  6. @ApiOperation(value = "文件上传")
  7. @PostMapping("upload")
  8. public R upload(
  9. @ApiParam(name = "file", value = "文件", required = true)
  10. @RequestParam("file") MultipartFile file,
  11. @ApiParam(name = "host", value = "文件上传路径", required = false)) {
  12. String uploadUrl = fileService.upload(file);
  13. //返回r对象
  14. return R.ok().message("文件上传成功").data("url", uploadUrl);
  15. }

2、综合测试