|
|
@@ -1,114 +0,0 @@
|
|
|
-package org.linlinjava.litemall.os.service;
|
|
|
-
|
|
|
-import com.qcloud.cos.COSClient;
|
|
|
-import com.qcloud.cos.ClientConfig;
|
|
|
-import com.qcloud.cos.auth.BasicCOSCredentials;
|
|
|
-import com.qcloud.cos.auth.COSCredentials;
|
|
|
-import com.qcloud.cos.model.ObjectMetadata;
|
|
|
-import com.qcloud.cos.model.PutObjectRequest;
|
|
|
-import com.qcloud.cos.model.PutObjectResult;
|
|
|
-import com.qcloud.cos.region.Region;
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
-import org.springframework.context.annotation.PropertySource;
|
|
|
-import org.springframework.core.io.Resource;
|
|
|
-import org.springframework.core.io.UrlResource;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
-
|
|
|
-import java.net.MalformedURLException;
|
|
|
-import java.net.URL;
|
|
|
-import java.nio.file.Path;
|
|
|
-import java.util.stream.Stream;
|
|
|
-
|
|
|
-/**
|
|
|
- * 腾讯对象存储服务
|
|
|
- *
|
|
|
- * 注意:虽然腾讯对象存储英文缩写是cos(cloud object storage),但这里称之为tos(tencent object storage)
|
|
|
- */
|
|
|
-@PropertySource(value = "classpath:tencent.properties")
|
|
|
-@Service("tos")
|
|
|
-public class TencentOsService implements ObjectStorageService {
|
|
|
-
|
|
|
- @Value("${tencent.os.secretId}")
|
|
|
- private String accessKey;
|
|
|
- @Value("${tencent.os.secretKey}")
|
|
|
- private String secretKey;
|
|
|
- @Value("${tencent.os.region}")
|
|
|
- private String region;
|
|
|
- @Value("${tencent.os.bucketName}")
|
|
|
- private String bucketName;
|
|
|
-
|
|
|
- private COSClient cosClient;
|
|
|
-
|
|
|
- private COSClient getCOSClient() {
|
|
|
- if (cosClient == null) {
|
|
|
- // 1 初始化用户身份信息(secretId, secretKey)
|
|
|
- COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey);
|
|
|
- // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
|
|
|
- ClientConfig clientConfig = new ClientConfig(new Region(region));
|
|
|
- cosClient = new COSClient(cred, clientConfig);
|
|
|
- }
|
|
|
-
|
|
|
- return cosClient;
|
|
|
- }
|
|
|
-
|
|
|
- private String getBaseUrl() {
|
|
|
- return "https://" + bucketName + ".cos-website." + region + ".myqcloud.com/";
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void store(MultipartFile file, String keyName) {
|
|
|
- try {
|
|
|
- // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20M以下的文件使用该接口
|
|
|
- ObjectMetadata objectMetadata = new ObjectMetadata();
|
|
|
- objectMetadata.setContentLength(file.getSize());
|
|
|
- objectMetadata.setContentType(file.getContentType());
|
|
|
- // 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 `bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg` 中,对象键为 doc1/pic1.jpg, 详情参考 [对象键](https://cloud.tencent.com/document/product/436/13324)
|
|
|
- PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, file.getInputStream(), objectMetadata);
|
|
|
- PutObjectResult putObjectResult = getCOSClient().putObject(putObjectRequest);
|
|
|
- } catch (Exception ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Stream<Path> loadAll() {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Path load(String keyName) {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Resource loadAsResource(String keyName) {
|
|
|
- try {
|
|
|
- URL url = new URL(getBaseUrl() + keyName);
|
|
|
- Resource resource = new UrlResource(url);
|
|
|
- if (resource.exists() || resource.isReadable()) {
|
|
|
- return resource;
|
|
|
- } else {
|
|
|
- return null;
|
|
|
- }
|
|
|
- } catch (MalformedURLException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return null;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void delete(String keyName) {
|
|
|
- try {
|
|
|
- getCOSClient().deleteObject(bucketName, keyName);
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public String generateUrl(String keyName) {
|
|
|
- return getBaseUrl() + keyName;
|
|
|
- }
|
|
|
-}
|