日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

對象存儲OSS使用Java實現(xiàn)簽名Header上傳的示例

概述

對象存儲OSS SDK提供了集成簽名、上傳和下載的SDK,但實際使用中,有時需要使用API的方式實現(xiàn)在簽名的情況下進行上傳和下載,本文以PutObject接口為例,提供了Java語言實現(xiàn)的示例。

說明

建議優(yōu)先使用OSS提供SDK,本文提供的只是簽名實現(xiàn)上傳示例,實際使用中需要結合業(yè)務進行代碼改動。

詳細信息

Java使用PutObject接口實現(xiàn)示例代碼如下。

說明

JDK版本為1.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 {
//添加 請求內(nèi)容
connection= (HttpURLConnection) url1.openConnection();
//設置HTTP連接屬性
connection.setDoOutput(true);// HTTP正文內(nèi),因此需要設為true,默認情況下是false。
connection.setRequestMethod("PUT"); // 可以根據(jù)需要提交GET、POST、DELETE、PUT等HTTP提供的功能。
//connection.setUseCaches(false);//設置緩存,注意設置請求方法為post不能用緩存。
// connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Date", date);  //設置請求的服務器網(wǎng)址和域名,例如***.**.***.***。
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();//向?qū)ο筝敵隽鲗懗鰯?shù)據(jù),這些數(shù)據(jù)將存到內(nèi)存緩沖區(qū)中。          
out.write(new String("測試數(shù)據(jù)").getBytes());            //out.write(new String("測試數(shù)據(jù)").getBytes());            //刷新對象輸出流,將任何字節(jié)都寫入潛在的流中。       
out.flush();     
// 關閉流對象.此時,不能再向?qū)ο筝敵隽鲗懭肴魏螖?shù)據(jù),先前寫入的數(shù)據(jù)存在于內(nèi)存緩沖區(qū)中。          
out.close();           
//讀取響應。           
if (connection.getResponseCode()==200)      {
// 從服務器獲得一個輸入流。
InputStreamReader inputStream =new InputStreamReader(connection.getInputStream());//調(diào)用HttpURLConnection連接對象的getInputStream()函數(shù), 將內(nèi)存緩沖區(qū)中封裝好的完整的HTTP請求電文發(fā)送到服務端。
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();     
}   
}
}

相關文檔

Header中包含簽名

適用于

  • 對象存儲OSS