OSS签名Header实现Demo(Java)
概述
OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了java实现的demo。
注:建议优先使用OSS提供SDK,本文提供的只是签名实现上传demo,实际使用中需要结合业务来进行改动代码
详细信息
PutObject实现demo(测试环境JDK1.8):
import org.apache.commons.codec.binary.Base64; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.*; public class OssSignHeader { private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1"; private final static String CHARSET_UTF8 = "utf8"; private final static String ALGORITHM = "HmacSHA1"; public static String hmacSha1(String data, String key) { try { Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), ALGORITHM); mac.init(keySpec); byte[] rawHmac; rawHmac = mac.doFinal(data.getBytes(CHARSET_UTF8)); return new String(Base64.encodeBase64(rawHmac)); } catch (Exception e) { throw new RuntimeException(e); } } public static String buildSignData(String Date,String VERB,String CanonicalizedResource){ String signData = "PUT" + "\n"+ "\n"+ "\n" + Date + "\n" + CanonicalizedResource; return signData; } public static String getGMTDate(){ Calendar cd = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); sdf.setTimeZone(TimeZone.getTimeZone("GMT")); String str = sdf.format(cd.getTime()); return str; } public static void main(String[] args) throws Exception{ String date = getGMTDate(); String ossBucket= "您的bucket名称"; String accessKeyId= "您的AccessKey"; String secretAccessKey= "您的AccessSecret"; String resourcePath = "/xx/panda/102283/111.txt"; String resourcePath1 = "panda/102283/111.txt"; String VERB = "GET"; String url = "http://"+ossBucket+".oss-cn-hangzhou.aliyuncs.com/"; String Signature = (hmacSha1(buildSignData(date,VERB,resourcePath),secretAccessKey)); String Authorization = "OSS " + accessKeyId + ":" + Signature; System.out.println(Authorization); Map<String,String> head = new HashMap<String,String>(); head.put("Date",date); head.put("Authorization",Authorization); URL url1 = new URL(url + resourcePath1); HttpURLConnection connection ; StringBuffer sbuffer=null; try { //添加 请求内容 connection= (HttpURLConnection) url1.openConnection(); //设置http连接属性 connection.setDoOutput(true);// http正文内,因此需要设为true, 默认情况下是false; connection.setRequestMethod("PUT"); // 可以根据需要 提交 GET、POST、DELETE、PUT等http提供的功能 //connection.setUseCaches(false);//设置缓存,注意设置请求方法为post不能用缓存 // connection.setInstanceFollowRedirects(true); connection.setRequestProperty("Date", date); //设置请 求的服务器网址,域名,例如***.**.***.*** connection.setRequestProperty("Authorization", Authorization);//设定 请求格式 json,也可以设定xml格式的 //connection.setRequestProperty("Content-Length", obj.toString().getBytes().length + ""); //设置文件请求的长度 connection.setReadTimeout(10000);//设置读取超时时间 connection.setConnectTimeout(10000);//设置连接超时时间 connection.connect(); OutputStream out = connection.getOutputStream();//向对象输出流写出数据,这些数据将存到内存缓冲区中 out.write(new String("测试数据").getBytes()); //out.write(new String("测试数据").getBytes()); //刷新对象输出流,将任何字节都写入潜在的流中 out.flush(); // 关闭流对象,此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中 out.close(); //读取响应 if (connection.getResponseCode()==200) { // 从服务器获得一个输入流 InputStreamReader inputStream =new InputStreamReader(connection.getInputStream());//调用HttpURLConnection连接对象的getInputStream()函数, 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 BufferedReader reader = new BufferedReader(inputStream); String lines; sbuffer= new StringBuffer(""); while ((lines = reader.readLine()) != null) { lines = new String(lines.getBytes(), "utf-8"); sbuffer.append(lines); } reader.close(); }else{ System.out.println(connection.getResponseCode()); } //断开连接 connection.disconnect(); System.out.println("OK "+url1); } catch (IOException e) { e.printStackTrace(); } } }
相关文档
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
编程你只想占有我的青春,可我想陪你到老
01. 为什么选择计算机专业? 互联网随着智能手机的普及在近些年来野蛮生长,一个个融资千万的创业故事,坊间传说的“别人家年终奖”,各种“大几十万年薪”的虚位以待,都在深深刺痛着其他行业的你我他们。 网友也曾对程序员“为什么选择计算机专业?”发起了提问。选择计算机专业最主要的原因莫过于软件开发“钱景客观”!成了大家普遍认同的高赞回答! 网友高赞回复:“没有钱啊,肯定要读计算机, 不读没有钱用。就是读计算机这种东西,才能维持得了生活这样子。” 02.理想和现实 当我们怀着对软件行业高工资美好憧憬,开始撸起袖子加油干的时候,你会发现,你的人生很可能是这样的: 对不起,在互联网这个行业,高强度的工作负荷,不是只对程序员制定的,是对所有的人,包括测试、项目经理、架构师。 下面是某高龄程序员切身感受: 1.明显感觉脑力跟不上了,容易疲劳。以前可以专心想一个算法很长时间,现在想一会就觉得注意力难以集中,容易犯困。 2.记性没有以前好了。看过的资料,吸收起来没有年轻时那么快。就算记住了,也很容易忘掉。 3.体力也没有以前好了。以前我可以连续通宵编程一周,每天只睡4个小时;或者完全不睡觉72小时编程。现...
- 下一篇
OSS签名Header实现Demo(Python)
概述 OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了python实现的demo。注:建议优先使用OSS提供SDK,本文提供的只是签名实现上传demo,实际使用中需要结合业务来进行改动代码 详细信息 PutObject实现Demo(测试环境python2.7): # -*- coding: utf-8 -*- import base64 import hmac import sha import urllib2 from datetime import datetime accesskey = '您的accesskey'; accesskeysecret = '您的AccesskeySecret' endpoint='oss-cn-hangzhou.aliyuncs.com' bucket='您的bucket名称' #您的上传文件路径 object='mytest/test.png' GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT' tim...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长