文章目录

  • 前言
  • 一、对象存储OSS?
  • 二、使用步骤
    • 1.POM引入
    • 2.对象上传
    • 3.关于AK和SK的获取
    • 4.关于微信小程序直传
  • 总结

前言

因为给某市做一个核酸预约登记扫码的防疫系统需要和联通合作,采用了联通云的对象存储技术,希望能给使用联通OSS的小伙伴们踩个坑。


一、对象存储OSS?

对象存储产品(Object Storage Service,简称 OSS),是提供的海量、安全、低成本、高可靠的云存储服务。

二、使用步骤

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");// 创建OSSClient实例。AmazonS3 amazonS3 = new AmazonS3Client(basicAWSCredentials);// 设置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)) {// 创建桶实例(容器, 无需重复创建)amazonS3.createBucket(bucketName);}// 创建对象请求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);// 设置读写权限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.关于AK和SK的获取

登陆联通云,进入控制台,当时找了好久才发现,链接这么小!!!

4.关于微信小程序直传

因为我们做的是微信小程序,考虑到带宽和安全问题,不考虑服务端上传而采用微信小程序直传。

联通云OSS官方文档

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

此时小程序端需要向应用服务端获取签名,获取签名方法详见

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);}}

总结

联通云OSS对象存储的官方文档还有待完善(很多地方其实是有出入的),最后都是翻阅亚马逊S3的文档、阿里云OSS文档和联系联通云的技术专家解决的。

使用联通云OSS小程序直传相关推荐

  1. 对象存储OSS(微信小程序直传实践)

    对象存储OSS(微信小程序直传实践) 一.配置Bucket跨域访问 客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin的请求消息.OSS对带有Origin头的请求消息会进行跨域规则( ...

  2. 联通云OSS上传文件

    第一步:首先准备沃云账号 AccessKeyId和AccessKeySecret 第二步:导入maven依赖 <dependency><groupId>com.amazonaw ...

  3. 微信小程序直传腾讯云COS并对图片持久化文字水印案例

    大家好,我是前端发现者https://blog.csdn.net/Smell_rookie,是一名页面仔工程师,我会不定时在CSDN更新我的博客,有兴趣的可以点个关注来逛逛我的主页. 写这个需求时网上 ...

  4. 前端阿里云OSS直传,微信小程序版本

    前言: 网络上许多的文章资料,全是使用阿里云官方的SDK,ali-oss插件去做直传.可是各位素未谋面的朋友要注意,这个SDK它支持web环境使用,也就是PC端浏览器. 当项目环境切换到微信小程序,是 ...

  5. 微信小程序:阿里云OSS直传实践-PHP实现服务端签名

    目录 1.阿里云OSS上传方式 1.1.Web端Browser.js SDK直传(不推荐) 1.2.Web端上传服务端再上传至OSS 1.3.服务端签名后Web端直传(推荐) 2.PHP服务端生成签名 ...

  6. 微信小程序录音直传阿里云OSS并语音识别

    前言 如题:做一个录音文字识别功能,知识点有三个,分别是微信小程序的录音功能.录音文件直传阿里云OSS.使用阿里云的录音文件识别接口返回识别后的文字 一.微信小程序录音 官方文档:微信小程序全局唯一的 ...

  7. uniapp微信小程序外壳内联H5实现支付

    业务场景:用户有现成的微信H5应用(有微信支付).用户想要一个一摸一样的小程序版本,但是又不想高成本去重新开发,所以可以考虑采用小程序的web-view组件内联现有的微信H5应用(哇简直不要再偷懒了! ...

  8. 微信小程序+阿里物联/Onenet物联+esp32搭建无服务器物联系统(一)---ESP32硬件设计开源

    目录 简介 一.硬件设计开源连接 二.硬件设计解析 1.电路原理图 2.PCB版图 3.BOM资料 4.整体项目的资料连接 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(一) 微 ...

  9. 前端上传图片到阿里云(pc端和uniapp小程序)

    1.pc端直接传文件 官方文档JavaScript客户端签名直传 如果前端是原生的html写的话,就去官网下载示例来看,把文件里面的配置修改成子阿里云的配置就好 ![在这里插入图片描述](https: ...

最新文章

  1. wps office oa控件 痕迹_WPS大更新,Office的付费功能免费用,我不会是最后一个知道的吧?...
  2. pdf格式怎么转换成word格式
  3. 国内Linux shell,管理你的 shell 环境 | Linux 中国
  4. QNNPACK高性能前向内核库全面剖析——引言篇
  5. OpenCV中Mat的属性
  6. odd raio值 是什麼_乳化油相所需的HLB值
  7. js+jquery手写弹出提示框
  8. 在linux下 用户的密码错误,linux – 常规用户帐户之间的su失败,“su:密码错误”...
  9. SQL那些事儿(七)--oracle表空间、用户查看基本语句
  10. Go语言实现线程安全访问队列
  11. html 文本框 p,Javascript实现HTML表单form多个HttpPost请求
  12. 现有VI 创建子VI(LabVIEW软件)
  13. C语言学习-翁凯(第十章笔记)
  14. 阿里云物联网平台体验(树莓派+Python篇) 1
  15. 严格执行8小时工作制、双休,会怎样?
  16. 每日新闻丨五方面推动云计算产业发展;字节跳动与澎湃合资成立视听科技
  17. 计算机二级access分数分布_全国计算机等级考试2017年上半年二级ACCESS数据库成绩查询...
  18. 什么是“热门”,短语是从哪里来的?
  19. 英语单词总结10/7
  20. gmail邮箱在OUTLOOK中的设置

热门文章

  1. 2021-2027全球与中国触觉开关市场现状及未来发展趋势
  2. Docker详细文档
  3. 英语不好,能不能学软件编程?不懂英文能学编程吗
  4. 《Mysql》必知必会读书笔记
  5. Java中访问修饰符public、private、protect、default访问范围
  6. 看了DOS中断后我内牛满面
  7. matlab程序圆形牛栏,Matlab课本计算题.doc
  8. 浮动的简介——CSS
  9. ocp 考试相关资料
  10. java设计九宫格拼图软件哪个好用_八款超好用的拼图工具