• COS对象存储


    一. 什么是对象存储

    • 腾讯云叫COS,在阿里云叫OSS,是一样的
    • 对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK 和工具等多样化方式,用户可简单、快速地接入 COS,进行多格式文件的上传、下载和管理,实现海量数据存储和管理。

    二. 相关配置项

    • 图床如果使用COS也需要设置一下配置 

    • 服务器上创建存储桶,从概览查看桶的信息

    • 从密钥管理查看accessKey/secretKey

    三. 代码实现


    POM依赖
    1. <!--腾讯云存储依赖-->
    2. <dependency>
    3. <groupId>com.qcloud</groupId>
    4. <artifactId>cos_api</artifactId>
    5. <version>5.2.4</version>
    6. </dependency>
    COS配置文件
    1. spring:
    2. tencent:
    3. accesskey: 你自己的secretId
    4. secretKey: 你自己的secretKey
    5. bucket: ap-nanjing
    6. bucketName: test-1254123199
    7. path: https://test-1254123199.cos.ap-nanjing.myqcloud.com
    8. preffix: img
    9. servlet:
    10. multipart:
    11. max-file-size: 10MB
    12. max-request-size: 10MB
    13. server:
    14. tomcat:
    15. max-swallow-size: 10MB
    COS配置类
    1. @Data
    2. @Component
    3. @ConfigurationProperties(prefix = "spring.tencent")
    4. public class OssConfig {
    5. private String accesskey;
    6. private String secretKey;
    7. private String bucket;
    8. private String bucketName;
    9. private String path;
    10. private String preffix;
    11. }
    控制器
    1. /**
    2. * 文件上传控制器
    3. */
    4. @Controller
    5. @RequestMapping(value = "/upload")
    6. public class UploadController {
    7. @Autowired
    8. OssConfig ossConfig;
    9. /**
    10. * 上传到腾讯云服务器(https://cloud.tencent.com/document/product/436/10199)
    11. *
    12. * @return
    13. */
    14. @PostMapping(value = "/tencent")
    15. @ResponseBody
    16. public Object upload(@RequestParam(value = "file") MultipartFile file) {
    17. if (file == null) {
    18. return new UploadMsg(0, "文件为空", null);
    19. }
    20. // 获取原始上传的文件名
    21. String oldFileName = file.getOriginalFilename();
    22. // 获取文件类型[后缀]
    23. String suffix = oldFileName.substring(oldFileName.lastIndexOf("."));
    24. // 使用UUID生成新的文件名
    25. String newFileName = UUID.randomUUID() + suffix;
    26. // 上传文件按日期生成的路径
    27. Calendar cal = Calendar.getInstance();
    28. int year = cal.get(Calendar.YEAR);
    29. int month = cal.get(Calendar.MONTH);
    30. int day = cal.get(Calendar.DATE);
    31. // 1 初始化用户身份信息(secretId, secretKey)
    32. COSCredentials cred = new BasicCOSCredentials(ossConfig.getAccesskey(), ossConfig.getSecretKey());
    33. // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
    34. ClientConfig clientConfig = new ClientConfig(new Region(ossConfig.getBucket()));
    35. // 3 生成cos客户端
    36. COSClient cosclient = new COSClient(cred, clientConfig);
    37. // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
    38. String bucketName = ossConfig.getBucketName();
    39. // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口
    40. // 大文件上传请参照 API 文档高级 API 上传
    41. File localFile = null;
    42. try {
    43. localFile = File.createTempFile("temp", null);
    44. file.transferTo(localFile);
    45. // 指定要上传到 COS 上的路径
    46. String key = "/" + ossConfig.getPreffix() + "/" + year + "/" + month + "/" + day + "/" + newFileName;
    47. // 上传文件的请求对象
    48. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
    49. // 使用COS客户端上传文件
    50. PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
    51. return new UploadMsg(1, "上传成功", ossConfig.getPath() + putObjectRequest.getKey());
    52. } catch (IOException e) {
    53. return new UploadMsg(-1, e.getMessage(), null);
    54. } finally {
    55. // 关闭客户端(关闭后台线程)
    56. cosclient.shutdown();
    57. }
    58. }
    59. private class UploadMsg {
    60. public int status;
    61. public String msg;
    62. public String path;
    63. public UploadMsg() {
    64. super();
    65. }
    66. public UploadMsg(int status, String msg, String path) {
    67. this.status = status;
    68. this.msg = msg;
    69. this.path = path;
    70. }
    71. }
    72. }
    上传验证

  • 相关阅读:
    wait() ,notify(),notifyAll()以及wait()与sleep()比较
    【ict云赛道备考】华为云介绍
    线性DP算法的实现
    【群智能算法改进】一种改进的棕熊优化算法 IBOA算法[1]【Matlab代码#64】
    Alibaba架构师内部最新发布SpringCloud开发手册,Github限时开源
    【2023米哈游-2】数组相关
    SQL中的数据类型和规范化,助力数据存储优化
    搜维尔科技:使用Touch 触觉力反馈设备,用户可以完全沉浸在培训模拟、神经康复或远程的机器人操控中
    TCP/IP协议网络层
    Unity 使用StateMachineBehaviour让动画控制器状态自动关闭跳出
  • 原文地址:https://blog.csdn.net/qq_43372633/article/details/134443115