瀏覽代碼

获取签名

wangyunpeng 3 周之前
父節點
當前提交
a5c487623d

+ 6 - 3
api-module/src/main/java/com/tzld/piaoquan/api/common/enums/EnumUploadFileType.java

@@ -1,11 +1,14 @@
 package com.tzld.piaoquan.api.common.enums;
 
 public enum EnumUploadFileType {
-	FILE(4,"4"),
-	GIF(5,"5"),
+	PICTURE(1,"1"),
 	VIDEO(2,"2"),
 	VOICE(3,"3"),
-	PICTURE(1,"1");
+	FILE(4,"4"),
+	GIF(5,"5"),
+	SUBTITLE(6,"6"),
+	;
+
 	private Integer intType;
 	private String strType;
 	EnumUploadFileType(Integer intType, String strType){

+ 10 - 0
api-module/src/main/java/com/tzld/piaoquan/api/config/AliOssConfig.java

@@ -87,6 +87,7 @@ public class AliOssConfig {
 	public static String cdnDomain;
 	public static String imgDomain;
 	public static String videoDomain;
+	public static String uploadDomain;
 	public static String lvvideoDomain;
 	public static String pubBucket;
 	public static String priBucket;
@@ -108,6 +109,7 @@ public class AliOssConfig {
 			setCdnDomain(cdnDomain);
 			setImgDomain(imgDomain);
 			setVideoDomain(videoDomain);
+			setUploadDomain(uploadDomain);
 			setInternalEndPoint(internalEndPoint);
 			setPubBucket(pubBucket);
 			try{
@@ -325,6 +327,14 @@ public class AliOssConfig {
 		AliOssConfig.expiration = expiration;
 	}
 
+	public static String getUploadDomain() {
+		return uploadDomain;
+	}
+	@Value("${cdn.upload.domain}")
+	public void setUploadDomain(String uploadDomain) {
+		AliOssConfig.uploadDomain = uploadDomain;
+	}
+
 	public static PolicyDetailVO getPolicyDetail() {
 		return policyDetail;
 	}

+ 20 - 0
api-module/src/main/java/com/tzld/piaoquan/api/controller/FileController.java

@@ -1,13 +1,18 @@
 package com.tzld.piaoquan.api.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.stuuudy.commons.external.filestorage.enums.EnumPublicBuckets;
 import com.tzld.piaoquan.api.common.enums.ExceptionEnum;
 import com.tzld.piaoquan.api.common.exception.CommonException;
 import com.tzld.piaoquan.api.config.AliOssConfig;
 import com.tzld.piaoquan.api.model.param.FileUploadParam;
+import com.tzld.piaoquan.api.model.param.contentplatform.OssUploadSignParam;
 import com.tzld.piaoquan.api.model.vo.FileInfo;
+import com.tzld.piaoquan.api.model.vo.contentplatform.SignatureVO;
 import com.tzld.piaoquan.api.util.AliOssFileTool;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
@@ -20,6 +25,7 @@ import java.io.IOException;
 
 @RestController
 @RequestMapping("/file")
+@Slf4j
 public class FileController {
 
     @CrossOrigin(origins = "*")
@@ -48,4 +54,18 @@ public class FileController {
         return CommonResponse.create(fileInfo);
     }
 
+    @CrossOrigin(origins = "*")
+    @PostMapping("/signature")
+    @ApiOperation(value = "获取签名")
+    public CommonResponse<SignatureVO> signature(@Validated OssUploadSignParam ossUploadSignParam) {
+        log.info("获取OSS签名失败 param" + JSON.toJSONString(ossUploadSignParam));
+        SignatureVO signatureVO;
+        try {
+            signatureVO = AliOssFileTool.getUploadPolicy(ossUploadSignParam.getFileType());
+        } catch (Exception e) {
+            log.error("获取OSS签名失败", e);
+            return CommonResponse.create(ExceptionEnum.SYSTEM_ERROR.getCode(), "获取OSS签名失败");
+        }
+        return CommonResponse.success(signatureVO);
+    }
 }

+ 15 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/OssUploadSignParam.java

@@ -0,0 +1,15 @@
+package com.tzld.piaoquan.api.model.param.contentplatform;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class OssUploadSignParam extends VideoApiBaseParam {
+
+	@ApiModelProperty(value = "文件类型1:picture 2:视频 3:声音 4:文件  5:gif 6:字幕", required = true)
+	@NotNull
+	private Integer fileType;
+
+}

+ 14 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/SignatureVO.java

@@ -0,0 +1,14 @@
+package com.tzld.piaoquan.api.model.vo.contentplatform;
+
+import com.tzld.piaoquan.api.config.AliOssConfig;
+import lombok.Data;
+
+@Data
+public class SignatureVO {
+    private String accessId;
+    private String policy;
+    private String signature;
+    private String fileName;
+    private String host;
+    private String expire;
+}

+ 30 - 30
api-module/src/main/java/com/tzld/piaoquan/api/util/AliOssFileTool.java

@@ -27,9 +27,11 @@ import com.stuuudy.commons.util.CompressImage;
 import com.stuuudy.commons.util.MD5.Md5Util;
 import com.stuuudy.commons.util.exception.CommonsException;
 import com.stuuudy.commons.util.exception.EnumErrorException;
-import com.tzld.piaoquan.api.config.AliOssConfig;
 import com.tzld.piaoquan.api.common.enums.EnumUploadFileType;
+import com.tzld.piaoquan.api.config.AliOssConfig;
+import com.tzld.piaoquan.api.model.vo.contentplatform.SignatureVO;
 import com.tzld.piaoquan.growth.common.utils.DateUtils;
+import com.tzld.piaoquan.growth.common.utils.RandomUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -513,6 +515,7 @@ public class AliOssFileTool extends AliOssConfig {
         }
         return "";
     }
+
     /**
      * (重命名文件,实现是先拷贝文件,再删掉旧的文件)<BR>
      * 方法名:renameFile<BR>
@@ -737,48 +740,45 @@ public class AliOssFileTool extends AliOssConfig {
         }
     }
 
-    public static Map<String, String> getUploadPolicy(String fileName, Integer fileType, String bucketName)
-            throws Exception {
-
+    public static SignatureVO getUploadPolicy(Integer fileType) throws Exception {
+        // 后台随机生成唯一文件名
+        String env = PropertiesUtils.getProjectEnv();
+        if (StringUtils.isEmpty(env)) {
+            env = "qa";
+        }
+        String fileName = RandomUtil.generate18String();
+        String contentType = "";
         if (EnumUploadFileType.VIDEO.getIntType().equals(fileType)) {
-            fileName = "/video/" + fileName;
+            fileName = "/video/" + env + "/" + DateUtils.dateToStringyyyyMMdd(new Date()) + "/" + fileName;
         } else if (EnumUploadFileType.VOICE.getIntType().equals(fileType)) {
-            fileName = "/voice/" + fileName;
-        } else if (EnumUploadFileType.FILE.getIntType().equals(fileType)) {
-            fileName = "/file/" + fileName;
+            fileName = "/voice/" + env + "/" + DateUtils.dateToStringyyyyMMdd(new Date()) + "/" + fileName;
         } else {
-            fileName = "/pic/" + fileName;
+            fileName = "/pic/" + env + "/" + DateUtils.dateToStringyyyyMMdd(new Date()) + "/" + fileName;
         }
-        // String host = "http://" + bucket + "." + AliOssConfig.getOssEndPoint();
-
         long expireTime = 60 * 60 * 4;
         long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
         Date expiration = new Date(expireEndTime);
         PolicyConditions policyConds = new PolicyConditions();
-        policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 5261334938L);
-
-        policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY,
+        //4.95G  上限是5个G
+        policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 5261334938l);
+        policyConds.addConditionItem(MatchMode.Exact, PolicyConditions.COND_KEY,
                 AliOssConfig.getProjectName() + fileName);
+        if (!StringUtils.isEmpty(contentType)) {
+            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_TYPE, contentType);
+        }
+
         String postPolicy = AliOssConfig.getOssClient().generatePostPolicy(expiration, policyConds);
         byte[] binaryData = postPolicy.getBytes("utf-8");
         String encodedPolicy = BinaryUtil.toBase64String(binaryData);
         String postSignature = AliOssConfig.getOssClient().calculatePostSignature(postPolicy);
-        Map<String, String> respMap = new LinkedHashMap<String, String>();
-        respMap.put("accessId", AliOssConfig.getAccessKeyId());
-        respMap.put("policy", encodedPolicy);
-        respMap.put("signature", postSignature);
-        respMap.put("fileName", AliOssConfig.getProjectName() + fileName);
-
-        if ("clipres".equals(bucketName)) {
-            respMap.put("host", PropertiesUtils.getValue("oss.clipres.upload.domain"));
-        } else {
-            respMap.put("host", AliOssConfig.getLvvideoDomain());
-        }
-
-        // respMap.put("host", "https://oss.zuluki.com");
-        // respMap.put("callback", getCallBackStr(signUploadParams));
-        respMap.put("expire", String.valueOf(expireEndTime / 1000));
-        return respMap;
+        SignatureVO signatureVO = new SignatureVO();
+        signatureVO.setAccessId(AliOssConfig.getAccessKeyId());
+        signatureVO.setPolicy(encodedPolicy);
+        signatureVO.setSignature(postSignature);
+        signatureVO.setFileName(AliOssConfig.getProjectName() + fileName);
+        signatureVO.setHost(AliOssConfig.getUploadDomain());
+        signatureVO.setExpire(String.valueOf(expireEndTime / 1000));
+        return signatureVO;
     }
 
     public static String getSignaturedUrl(String fileName, Boolean isPrivate) {

+ 2 - 1
api-module/src/main/resources/application.properties

@@ -87,4 +87,5 @@ oss.growth.pubBucket=public:art-pubbucket,publicVideo:art-pubbucket
 oss.growth.priBucket=private:art-pribucket,privateVideo:art-privideo,privateVideoIn:art-privideo-in
 oss.growth.priEndPoint=pricdn.yishihui.com
 oss.growth.needPress=true
-oss.growth.internal.endPoint=oss-cn-hangzhou.aliyuncs.com
+oss.growth.internal.endPoint=oss-cn-hangzhou.aliyuncs.com
+cdn.upload.domain=https://weappupload.piaoquantv.com/

+ 64 - 0
common-module/src/main/java/com/tzld/piaoquan/growth/common/utils/RandomUtil.java

@@ -0,0 +1,64 @@
+package com.tzld.piaoquan.growth.common.utils;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Random;
+import java.util.UUID;
+
+public class RandomUtil {
+
+	public static final String ALLNUMBER = "0123456789";  
+	public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
+	public static final Integer FIXLENG=18;
+    /** 
+     * 返回一个定长的随机字符串(只包含大小写字母、数字)
+     *  随机字符串长度
+     * @return 随机字符串 
+     */  
+    public static String generate18String() {  
+        StringBuffer sb = new StringBuffer();  
+        Random random = new Random();  
+        for (int i = 0; i < FIXLENG; i++) {  
+            sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));  
+        }  
+        return sb.toString();  
+    } 
+    
+    public static void main(String[] args) {
+		//System.out.println(generate18String())
+        String proportion="0.01";
+        Long price=150l;
+        Double incomeMoney=price*(Double.valueOf(proportion));
+        System.out.println(incomeMoney);
+
+
+        BigDecimal b = new BigDecimal(incomeMoney);
+        Long t = b.setScale(0,BigDecimal.ROUND_HALF_UP).longValue();
+        System.out.println(t);
+
+    	
+	}
+    
+    public static String generateString(int length) {  
+        StringBuffer sb = new StringBuffer();  
+        Random random = new Random();  
+        for (int i = 0; i < length; i++) {  
+            sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));  
+        }  
+        return sb.toString();  
+    }
+    
+    public static String generateNumber(int length) {  
+        StringBuffer sb = new StringBuffer();  
+        Random random = new Random();  
+        for (int i = 0; i < length; i++) {  
+            sb.append(ALLNUMBER.charAt(random.nextInt(ALLNUMBER.length())));  
+        }  
+        return sb.toString();  
+    } 
+    
+    public static String getRandomUUIDStr() {
+		return UUID.randomUUID().toString().replaceAll("-", "")+Calendar.getInstance().getTimeInMillis();
+	}
+
+}