栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot2.6.7+vue2前后端分离腾讯云对象存储COS上传文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot2.6.7+vue2前后端分离腾讯云对象存储COS上传文件

时间:2022.6.27往后的版本可能需要更改依赖

前后端分离腾讯云对象存储COS上传文件
    • 后端
      • 添加pom依赖
      • 在application.yml中添加动态配置
      • 以下为方法示例
      • Entity
      • Controller
      • Service
      • ServiceImpl
    • 前端
      • 按钮
      • 上传对话框
      • 相关方法


后端 添加pom依赖


   com.qcloud
   cos_api
   5.6.89


 
 
     cn.hutool
     hutool-all
     5.5.9
 

获取腾讯云的密钥→https://console.cloud.tencent.com/cam/capi
COS地域→https://cloud.tencent.com/document/product/436/6224

在application.yml中添加动态配置
spring:
  # 配置文件大小限制
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 20MB

cos:
  secretId: 你的SecretId
  secretKey: 你的SecretKey
  regionName: 你的COS地域
  bucketName: 你的命名空间名称
以下为方法示例

实现方法在完成后返回文件的url,并将文件信息存储至数据库
未做文件类型限制

Entity
public class File implements Serializable {

    private String name;

    private String type;

    private Long size;

    private String url;
    
    private Date time;
}
Controller
@PostMapping("/upload")
public String upload(MultipartFile file) {
    return fileService.upload(file);
}
Service
String upload(MultipartFile file);
ServiceImpl
import cn.hutool.core.date.DateUtil;

@Service
public class FileServiceImpl extends ServiceImpl implements IFileService {

	@Resource
	private FileMapper fileMapper;
    @Value("${cos.secretId}")
    private String secretId;
    @Value("${cos.secretKey}")
    private String secretKey;
    @Value("${cos.bucketName}")
    private String bucketName;
    @Value("${cos.regionName}")
    private String regionName;

    @Override
    public String upload(MultipartFile file) {
        // 判断文件类型
        // 获取原始文件名
        String originalFilename = file.getOriginalFilename();
        String type = FileUtil.extName(originalFilename);
        long size = file.getSize();
        // 判断原始文件名
        if (originalFilename == null) {
            throw new ServiceException(Constants.CODE_500, "系统错误");
        }
        // 判断通过上传COS
        String filePath = PathUtils.generateFilePath(originalFilename);
        String url = uploadCOS(file, filePath);
        FileCOS saveFile = new FileCOS();
        saveFile.setName(originalFilename);
        saveFile.setType(type);
        saveFile.setSize(size / 1024);
        saveFile.setUrl(url);
        saveFile.setTime(DateUtil.parse(DateUtil.now()));
        fileMapper.insert(saveFile);
        return url;
    }

    public String uploadCOS(MultipartFile file, String filePath) {
        String key = filePath;
        try {
            // 默认不指定key的情况下,以文件内容的hash值作为文件名
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file.getInputStream(), null);
            // 使用cosClient调用第三方接口
            COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
            // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
            Region region = new Region(regionName);
            ClientConfig clientConfig = new ClientConfig(region);
            // 生成 cos 客户端。
            COSClient cosClient = new COSClient(cred, clientConfig);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //拼接返回路径
        return "https://" + bucketName + ".cos." + regionName + ".myqcloud.com/" + key;
    }
}

前端
  • 为前端将文件以formData格式存储,并通过val.raw的方式将数据传给formData对象,axios发送post请求到后端
  • 由于action属性为上传的地址里用#号忽略了,需要axios发送至后端的请求有一套完整的上传方法利用前端formData对像传递的文件进行文件的上传
按钮
上传文件
上传对话框

  
    
    
将文件拖到此处,或点击上传
上传文件
相关方法
handleFileUpload(){
  this.dialogOfUpload = true
},
handleChange(file, fileList) { //文件数量改变
  this.fileList = fileList;
},
confirmUpload() { //确认上传
  var param = new FormData();
  this.fileList.forEach(
      (val, index) => {
        param.append("file", val.raw);
      }
  );
  this.request.post("/file/upload", param).then(responce => {});
  this.$message({
    message: "上传成功!",
    duration: 1000
  });
  this.dialogOfUpload = false
  this.load()
},

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号