springboot使用腾讯云对象存储

一时失言乱红尘 2023-01-08 10:23 310阅读 0赞

原以为对象存储很难 毕竟之前我用了下 发现完全不会

今天静下心来研究了下 发现其实挺简单的

直接搜索
在这里插入图片描述
点击这个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个秘钥很重要 需要保存好

点击配置
在这里插入图片描述
在这里插入图片描述
加上这三个 一共是五个数据 我们都是要用到的

导入依赖

  1. <dependency>
  2. <groupId>com.qcloud</groupId>
  3. <artifactId>cos_api</artifactId>
  4. <version>5.6.24</version>
  5. </dependency>

配置文件

  1. #API密钥secretId
  2. spring.qcloud.secretId=
  3. #API密钥secretKey
  4. spring.qcloud.secretKey=
  5. #存储桶所属地域
  6. spring.qcloud.region=ap-nanjing
  7. #存储桶空间名称
  8. spring.qcloud.bucketName=
  9. #存储桶访问域名
  10. spring.qcloud.url=
  11. #上传文件前缀路径(eg:/images/)
  12. spring.qcloud.prefix=/images/

若是这样配置 就会在相应了目录下 生成这样的文件夹
在这里插入图片描述

上传文件的工具类

  1. /** * 腾讯云对象存储工具类 */
  2. public class QCloudCosUtils {
  3. //API密钥secretId
  4. private String secretId;
  5. //API密钥secretKey
  6. private String secretKey;
  7. //存储桶所属地域
  8. private String region;
  9. //存储桶空间名称
  10. private String bucketName;
  11. //存储桶访问域名
  12. private String url;
  13. //上传文件前缀路径(eg:/images/)
  14. private String prefix;
  15. public String getSecretId() {
  16. return secretId;
  17. }
  18. public void setSecretId(String secretId) {
  19. this.secretId = secretId;
  20. }
  21. public String getSecretKey() {
  22. return secretKey;
  23. }
  24. public void setSecretKey(String secretKey) {
  25. this.secretKey = secretKey;
  26. }
  27. public String getRegion() {
  28. return region;
  29. }
  30. public void setRegion(String region) {
  31. this.region = region;
  32. }
  33. public String getBucketName() {
  34. return bucketName;
  35. }
  36. public void setBucketName(String bucketName) {
  37. this.bucketName = bucketName;
  38. }
  39. public String getUrl() {
  40. return url;
  41. }
  42. public void setUrl(String url) {
  43. this.url = url;
  44. }
  45. public String getPrefix() {
  46. return prefix;
  47. }
  48. public void setPrefix(String prefix) {
  49. this.prefix = prefix;
  50. }
  51. /** * 上传File类型的文件 * @param file * @return 上传文件在存储桶的链接 */
  52. public String upload(File file) {
  53. //生成唯一文件名
  54. String newFileName = generateUniqueName(file.getName());
  55. //文件在存储桶中的key
  56. String key = prefix+newFileName;
  57. //声明客户端
  58. COSClient cosClient=null;
  59. try {
  60. //初始化用户身份信息(secretId,secretKey)
  61. COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey);
  62. //设置bucket的区域
  63. ClientConfig clientConfig = new ClientConfig(new Region(region));
  64. //生成cos客户端
  65. cosClient = new COSClient(cosCredentials, clientConfig);
  66. //创建存储对象的请求
  67. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
  68. //执行上传并返回结果信息
  69. PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
  70. return url+key;
  71. } catch (CosClientException e) {
  72. e.printStackTrace();
  73. } finally {
  74. cosClient.shutdown();
  75. }
  76. return null;
  77. }
  78. /** * upload()重载方法 * @param multipartFile * @return 上传文件在存储桶的链接 */
  79. public String upload(MultipartFile multipartFile) {
  80. System.out.println(multipartFile);
  81. //生成唯一文件名
  82. String newFileName = generateUniqueName(multipartFile.getOriginalFilename());
  83. //文件在存储桶中的key
  84. String key = prefix+newFileName;
  85. //声明客户端
  86. COSClient cosClient = null;
  87. //准备将MultipartFile类型转为File类型
  88. File file = null;
  89. try {
  90. //生成临时文件
  91. file = File.createTempFile("temp",null);
  92. //将MultipartFile类型转为File类型
  93. multipartFile.transferTo(file);
  94. //初始化用户身份信息(secretId,secretKey)
  95. COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey);
  96. //设置bucket的区域
  97. ClientConfig clientConfig = new ClientConfig(new Region(region));
  98. //生成cos客户端
  99. cosClient = new COSClient(cosCredentials, clientConfig);
  100. //创建存储对象的请求
  101. PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
  102. //执行上传并返回结果信息
  103. PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
  104. return url+key;
  105. } catch (IOException e) {
  106. e.printStackTrace();
  107. } finally {
  108. cosClient.shutdown();
  109. }
  110. return null;
  111. }
  112. /** * 根据UUID生成唯一文件名 * @param originalName * @return */
  113. public String generateUniqueName(String originalName) {
  114. return UUID.randomUUID() + originalName.substring(originalName.lastIndexOf("."));
  115. }
  116. }

配置注入

  1. /** * 配置注入 */
  2. @Configuration
  3. public class QCloudCosUtilsConfig {
  4. @ConfigurationProperties(prefix = "spring.qcloud")
  5. @Bean
  6. public QCloudCosUtils qcloudCosUtils() {
  7. return new QCloudCosUtils();
  8. }
  9. }

接口类

  1. /** *上唇文件接口 */
  2. public interface FileUploadService {
  3. /** * 处理浏览器文件上传请求 * @param multipartFile * @return */
  4. String upload(MultipartFile multipartFile);
  5. /** * 处理普通文件上传 * @param file * @return */
  6. String upload(File file);
  7. }

接口实现类

  1. @Service
  2. public class FileUploadServiceImpl implements FileUploadService {
  3. @Autowired
  4. private QCloudCosUtils qCloudCosUtils;
  5. @Override
  6. public String upload(MultipartFile multipartFile) {
  7. return qCloudCosUtils.upload(multipartFile);
  8. }
  9. @Override
  10. public String upload(File file) {
  11. return qCloudCosUtils.upload(file);
  12. }
  13. }

直接controller调用就好啦

如果需要回显 service会返回对应的图片路径 直接就能访问了

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php对接对象存储

    实际开发中,我们不可能把所有的图片,视频和附件等,都放在和站点同一个服务器上,因为这会占用我们大量的服务器带宽和资源 我们一般去对接各种云服务商的[对象存储][Link 1