阿里雲oss授權訪問文檔示例地址
阿里雲沒有提供直接的獲取是視頻時長的API接口,需要曲線處理
1、引入阿里雲oss pom
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency>
阿里雲工具類
/**
* @author ful
*/
@Component
@Slf4j
public class AliOSSUtil { // endpoint 訪問OSS的域名 @Value("${oss.agora.endpoint}") public String endpoint; // accessKeyId和accessKeySecret OSS的訪問密鑰 @Value("${oss.agora.id}") public String accessKeyId; @Value("${oss.agora.secret}") public String accessKeySecret; // Bucket 用來管理所存儲Object的存儲空間 @Value("${oss.agora.bucket}") public String bucketName; @Value("${oss.agora.region}") public String region; @Value("${oss.agora.vendor}") public String vendor; @Value("${oss.agora.cdn}") public String cdn; /** * 文件直傳 * * @param objectKey 上傳路徑 * @param inputStream 上傳流 * @throws RuntimeException */ public void fileUpload(String objectKey, InputStream inputStream) throws RuntimeException { Map map = getCommon(objectKey); OSS ossClient = null; try { ossClient = (OSS) map.get(0); AliOssPublicEntity model = (AliOssPublicEntity) map.get(1); if (ossClient.doesObjectExist(model.getBucketName(), model.getObjectKey())) { log.error("此文件重名,請更改文件名重試!"); throw new RuntimeException("此文件重名,請更改文件名重試!"); } PutObjectRequest putObjectRequest = new PutObjectRequest(model.getBucketName(), model.getObjectKey(), inputStream); PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest); String eTag = putObjectResult.getETag(); if (StringUtils.isBlank(eTag)) { log.error("文件直傳失敗!"); throw new RuntimeException("文件直傳失敗"); } } catch (Exception e) { log.error("文件直傳失敗,exp={}", e); throw new RuntimeException("文件直傳失敗:" + e.getMessage()); } finally { ossClient.shutdown(); try { inputStream.close(); } catch (IOException e) { log.error("關閉文件流異常={}", e); } } } /** * OSS獲取下載簽名URL * * @param objectKey 文件對象key * @return 簽名URL */ public String getOssObjectDownAuthUrl(String objectKey) throws RuntimeException { Map map = getCommon(objectKey); OSS ossClient = null; try { ossClient = (OSS) map.get(0); AliOssPublicEntity model = (AliOssPublicEntity) map.get(1); GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(model.getBucketName(), model.getObjectKey(), HttpMethod.GET); //這里設置簽名在30小時后過期 Date expiration = new Date(new Date().getTime() + 30L * 60L * 60L * 1000);// 生成URL // Date expireDate = new Date(System.currentTimeMillis() + 30L * 60L * 60L * 1000L); req.setExpiration(expiration); URL url = ossClient.generatePresignedUrl(req); String urlStr = url.toString(); return urlStr; } catch (Exception e) { log.error("getOssObjectDownAuthUrl 獲取下載簽名URL失敗,exp={}", e); throw new RuntimeException("獲取下載簽名URL失敗"); } finally { ossClient.shutdown(); } } /** * OSS獲取下載簽名URL * * @param objectKey 文件對象key * @param expireTime 當前時間加多少毫秒后過期,過期時間(毫秒) * @return 簽名URL */ public String getOssObjectDownAuthUrl(String objectKey, long expireTime) throws RuntimeException { Map map = getCommon(objectKey); OSS ossClient = null; try { ossClient = (OSS) map.get(0); AliOssPublicEntity model = (AliOssPublicEntity) map.get(1