日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用联通云OSS小程序直传

發(fā)布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用联通云OSS小程序直传 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、對象存儲OSS?
  • 二、使用步驟
    • 1.POM引入
    • 2.對象上傳
    • 3.關(guān)于AK和SK的獲取
    • 4.關(guān)于微信小程序直傳
  • 總結(jié)


前言

因為給某市做一個核酸預(yù)約登記掃碼的防疫系統(tǒng)需要和聯(lián)通合作,采用了聯(lián)通云的對象存儲技術(shù),希望能給使用聯(lián)通OSS的小伙伴們踩個坑。


一、對象存儲OSS?

對象存儲產(chǎn)品(Object Storage Service,簡稱 OSS),是提供的海量、安全、低成本、高可靠的云存儲服務(wù)。

二、使用步驟

1.POM引入

引入亞馬遜aws依賴:

<dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk</artifactId><version>1.11.24</version></dependency>

2.對象上傳

代碼如下(示例):

// 此處的AK和SK填寫自己的BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials("accessKey", "secretKey");// 創(chuàng)建OSSClient實例。AmazonS3 amazonS3 = new AmazonS3Client(basicAWSCredentials);// 設(shè)置endpointamazonS3.setEndpoint("https://obs-jsnj.woyun.cn");S3ClientOptions s3ClientOptions = S3ClientOptions.builder().setPathStyleAccess(true).setPayloadSigningEnabled(true).build();amazonS3.setS3ClientOptions(s3ClientOptions);// 桶名稱String bucketName = "demo";try {/*** ======================= 上傳 =====================================================*/String objectKey = "甘雨神里.jpg";File file = new File("/Users/ddogring/Pictures/甘雨神里.jpeg");String fileName = file.getName();objectKey = String.format(objectKey, fileName);// 判斷桶是否存在if (!amazonS3.doesBucketExist(bucketName)) {// 創(chuàng)建桶實例(容器, 無需重復(fù)創(chuàng)建)amazonS3.createBucket(bucketName);}// 創(chuàng)建對象請求PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, file);// 也可以文件流方式上傳// InputStream is = new FileInputStream(file);// ObjectMetadata metadata = new ObjectMetadata();// metadata.setContentType(fileName);// PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, is, metadata);// 設(shè)置讀寫權(quán)限putObjectRequest.withCannedAcl(CannedAccessControlList.Private);// 提交對象PutObjectResult result = amazonS3.putObject(putObjectRequest);if (Objects.nonNull(result)){System.out.println("result:=============================================================");System.out.println("result.getContentMd5():"+result.getContentMd5());System.out.println("result.getETag():"+result.getETag());System.out.println("result.getMetadata():"+result.getMetadata());System.out.println("result.getVersionId():"+result.getVersionId());System.out.println("result.getExpirationTimeRuleId():"+result.getExpirationTimeRuleId());System.out.println("result.getExpirationTime():"+result.getExpirationTime());}} catch (Exception e){e.printStackTrace();}

3.關(guān)于AK和SK的獲取

登陸聯(lián)通云,進入控制臺,當(dāng)時找了好久才發(fā)現(xiàn),鏈接這么小!!!

4.關(guān)于微信小程序直傳

因為我們做的是微信小程序,考慮到帶寬和安全問題,不考慮服務(wù)端上傳而采用微信小程序直傳。

聯(lián)通云OSS官方文檔

https://www.cucloud.cn/document.html?id=572&arcid=1

此時小程序端需要向應(yīng)用服務(wù)端獲取簽名,獲取簽名方法詳見

https://www.jianshu.com/p/fbfb43b96829

以下是Java生成簽名代碼部分

/*** 獲取oss認證簽名* @author DdogRing* @date 2022/4/13 0013 16:21* @param* @return java.util.Map<java.lang.String,java.lang.Object>*/public Map<String, Object> getSignature() throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");Calendar calendar = Calendar.getInstance();// policy有效期10分鐘calendar.add(Calendar.MINUTE, - (8 * 60) + 10);Date time = calendar.getTime();String format = sdf.format(time);// 生成policyString policy = "{\"expiration\": \""+ format +"\",\"conditions\": [[\"eq\",\"$bucket\", \""+ bucketName + "\" ],[\"starts-with\", \"$key\", \"" + objectName+ "\"],[\"content-length-range\", 0, 104857600],[\"eq\",\"$Content-Type\", \"text/plain\"],{\"acl\":\""+ CannedAccessControlList.Private +"\"}]}";// policy加密String encodePolicy = new String(Base64.getEncoder().encode(policy.getBytes()));// 計算簽名String signature = computeSignature(accessKeySecret, encodePolicy);Map<String, Object> res = new HashMap<>();res.put("accessKeyId", "accessKey");res.put("encodePolicy", encodePolicy);res.put("signature", signature);res.put("filename", objectName);return res;}/*** 計算簽名* @author DdogRing* @date 2022/4/13 0013 16:22* @param key accessKeySecret* @param data base64后的policy* @return java.lang.String*/public String computeSignature(String key, String data) {try {byte[] signData = sign(key.getBytes(DEFAULT_ENCODING), data.getBytes(DEFAULT_ENCODING), macInstance, LOCK,ALGORITHM);return BinaryUtils.toBase64(signData);} catch (UnsupportedEncodingException ex) {throw new RuntimeException("Unsupported algorithm: " + DEFAULT_ENCODING, ex);}}protected byte[] sign(byte[] key, byte[] data, Mac macInstance, Object lock, String algorithm) {try {if (macInstance == null) {synchronized (lock) {if (macInstance == null) {macInstance = Mac.getInstance(algorithm);}}}Mac mac;try {mac = (Mac) macInstance.clone();} catch (CloneNotSupportedException e) {mac = Mac.getInstance(algorithm);}mac.init(new SecretKeySpec(key, algorithm));return mac.doFinal(data);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException("Unsupported algorithm: " + algorithm, ex);} catch (InvalidKeyException ex) {throw new RuntimeException("Invalid key: " + key, ex);}}

總結(jié)

聯(lián)通云OSS對象存儲的官方文檔還有待完善(很多地方其實是有出入的),最后都是翻閱亞馬遜S3的文檔、阿里云OSS文檔和聯(lián)系聯(lián)通云的技術(shù)專家解決的。

總結(jié)

以上是生活随笔為你收集整理的使用联通云OSS小程序直传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。