|
@@ -0,0 +1,175 @@
|
|
|
+package com.zhichen.modules.txcos.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.lang.Validator;
|
|
|
+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.region.Region;
|
|
|
+import com.zhichen.modules.alioss.bo.OssRequest;
|
|
|
+import com.zhichen.modules.txcos.service.CosService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.Random;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class CosServiceImpl implements CosService {
|
|
|
+ private static final Logger LOGGER = LoggerFactory.getLogger(CosServiceImpl.class);
|
|
|
+
|
|
|
+ @Value("${tengxun.cos.dir.prefix}")
|
|
|
+ private String TENGXUN_COS_DIR_PREFIX;
|
|
|
+
|
|
|
+ @Value("${tengxun.cos.bucketName}")
|
|
|
+ private String TENGXUN_COS_BUCKET_NAME;
|
|
|
+
|
|
|
+ @Value("${tengxun.cos.accessKeyId}")
|
|
|
+ private String TENGXUN_COS_ACCESSKEYID;
|
|
|
+ @Value("${tengxun.cos.accessKeySecret}")
|
|
|
+ private String TENGXUN_COS_ACCESSKEYSECRET;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String upload(OssRequest file) throws Exception{
|
|
|
+ // 初始化COS客户端
|
|
|
+ COSClient cosClient = initCOSClient();
|
|
|
+ //获取上传文件输入流
|
|
|
+ InputStream inputStream = file.getFile().getInputStream();
|
|
|
+ String originalFilename = file.getFile().getOriginalFilename();
|
|
|
+ String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
|
|
|
+
|
|
|
+ String fileName = TENGXUN_COS_DIR_PREFIX + generateRandomFilename(file) + "." + suffix;
|
|
|
+
|
|
|
+ // 指定要上传的文件
|
|
|
+ String bucketName = TENGXUN_COS_BUCKET_NAME;
|
|
|
+ String key =fileName; // 对象键,即上传到COS后的文件路径
|
|
|
+ ObjectMetadata metadata = new ObjectMetadata();
|
|
|
+ metadata.setContentType("image/jpeg"); // 设置 Content-Type
|
|
|
+ // 上传文件
|
|
|
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream,metadata);
|
|
|
+ cosClient.putObject(putObjectRequest);
|
|
|
+
|
|
|
+ // 关闭客户端
|
|
|
+ cosClient.shutdown();
|
|
|
+ return key;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String uploadWithPath(OssRequest file, String path)throws Exception {
|
|
|
+ // 初始化COS客户端
|
|
|
+ COSClient cosClient = initCOSClient();
|
|
|
+ //获取上传文件输入流
|
|
|
+ InputStream inputStream = file.getFile().getInputStream();
|
|
|
+
|
|
|
+ // 指定要上传的文件
|
|
|
+ String bucketName = TENGXUN_COS_BUCKET_NAME;
|
|
|
+ String key =path; // 对象键,即上传到COS后的文件路径
|
|
|
+ ObjectMetadata metadata = new ObjectMetadata();
|
|
|
+ metadata.setContentType("image/jpeg"); // 设置 Content-Type
|
|
|
+ // 上传文件
|
|
|
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream,metadata);
|
|
|
+ cosClient.putObject(putObjectRequest);
|
|
|
+
|
|
|
+ // 关闭客户端
|
|
|
+ cosClient.shutdown();
|
|
|
+ return key;
|
|
|
+ }
|
|
|
+
|
|
|
+ private COSClient initCOSClient() {
|
|
|
+ // 1. 初始化用户身份信息(secretId, secretKey)
|
|
|
+ String secretId = TENGXUN_COS_ACCESSKEYID;
|
|
|
+ String secretKey = TENGXUN_COS_ACCESSKEYSECRET;
|
|
|
+ COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
|
|
|
+
|
|
|
+ // 2. 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
|
|
|
+ Region region = new Region("ap-guangzhou"); // 例如:北京区域
|
|
|
+
|
|
|
+ // 3. 生成cos客户端
|
|
|
+ ClientConfig clientConfig = new ClientConfig(region);
|
|
|
+ COSClient cosClient = new COSClient(cred, clientConfig);
|
|
|
+
|
|
|
+ return cosClient;
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成存储文件名
|
|
|
+ public String generateRandomFilename(OssRequest ossRequest) {
|
|
|
+ String prefixName = "";
|
|
|
+ if (Validator.isNotEmpty(ossRequest.getUserId()) && ossRequest.getUserId().longValue() > 0) {
|
|
|
+ prefixName = prefixName + ossRequest.getUserId();
|
|
|
+ }
|
|
|
+ if (Validator.isNotEmpty(ossRequest.getGradeId()) && ossRequest.getGradeId().longValue() > 0) {
|
|
|
+ prefixName = prefixName + "/" + ossRequest.getGradeId();
|
|
|
+ }
|
|
|
+ String RandomFilename = "";
|
|
|
+ //生成随机数
|
|
|
+ Random rand = new Random();
|
|
|
+ int random = rand.nextInt();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ Calendar calCurrent = Calendar.getInstance();
|
|
|
+ int intDay = calCurrent.get(Calendar.DATE);
|
|
|
+ int intMonth = calCurrent.get(Calendar.MONTH) + 1;
|
|
|
+ int intYear = calCurrent.get(Calendar.YEAR);
|
|
|
+ String now = String.valueOf(System.currentTimeMillis());
|
|
|
+
|
|
|
+ RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
|
|
|
+ switch (ossRequest.getImageStatus()) {
|
|
|
+ case 0:
|
|
|
+ RandomFilename = "avatar" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ RandomFilename = "IDNumber" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ RandomFilename = "QuestionBank" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ RandomFilename = "guide" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ RandomFilename = "advertising" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ RandomFilename = "IDCard" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ RandomFilename = "file" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ RandomFilename = "certificate" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ RandomFilename = "question" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+"img";
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ RandomFilename = "wisdom" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+ String.valueOf(random > 0 ? random : (-1) * random);
|
|
|
+ break;
|
|
|
+ case 10:
|
|
|
+ RandomFilename = "file" + "/" +(sdf.format(new Date())) + "/" + now + ".zip";
|
|
|
+ break;
|
|
|
+ case 11:
|
|
|
+ RandomFilename = "file/pdf/" +(sdf.format(new Date())) + "/" + now + ".pdf";
|
|
|
+ break;
|
|
|
+ case 12:
|
|
|
+ String filename = ossRequest.getFile().getOriginalFilename();
|
|
|
+ RandomFilename = "file/dangan/upload/"+ filename.substring(0, filename.lastIndexOf("."));
|
|
|
+ break;
|
|
|
+ case 13:
|
|
|
+ String filename2 = ossRequest.getFile().getOriginalFilename();
|
|
|
+ RandomFilename = "tupain/"+ filename2.substring(0, filename2.lastIndexOf("."));
|
|
|
+ break;
|
|
|
+ case 14:
|
|
|
+ RandomFilename = "tupain/"+ now;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return RandomFilename;
|
|
|
+ }
|
|
|
+}
|