का उपयोग किए बिना एंड्रॉइड से अमेज़ॅन एस 3 तक फ़ाइलों को कैसे अपलोड करें मैं अपने एंड्रॉइड डिवाइस से एक बाल्टी में एक फ़ाइल अपलोड करने के लिए अमेज़ॅन के एस 3 के आरईएसटी एपीआई का उपयोग करने पर काम कर रहा हूं। मेरे पास कुंजी और SECRET_KEY है, लेकिन मुझे यकीन नहीं है कि हस्ताक्षर कैसे ठीक से उत्पन्न करें वे अपने अनुरोधों में देख रहे हैं। मैं अपने सर्वर पर एक HttpPut का उपयोग कर रहा हूँ, लेकिन मुझे यकीन नहीं है कि कैसे हस्ताक्षर Valal सही ढंग से उत्पन्न करने के लिए। अब तक यहाँ मैं क्या है: यहाँएसडीके
HttpPut put = new HttpPut(URL);
String fmt = "EEE, dd MMM yyyy HH:mm:ss ";
SimpleDateFormat format = new SimpleDateFormat(fmt, Locale.US);
format.setTimeZone(TimeZone.getTimeZone("GMT"));
String method = "PUT";
String contentType = "application/octet-stream";
String date = format.format(new Date()) + "GMT";
String bucket = "/test-bucket52809/";
StringBuffer buf = new StringBuffer();
buf.append(method).append("\n\n");
buf.append(contentType).append("\n");
buf.append(date).append("\n");
buf.append(bucket);
String signature = percentEncodeRfc3986(hmac(buf.toString()));
फिर तरीकों मैं हस्ताक्षर मूल्य उत्पन्न करने के लिए का उपयोग कर रहे हैं:
private void setupMac() throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException
{
byte[] secretyKeyBytes = KEY_SECRET.getBytes("UTF-8");
signingKey = new SecretKeySpec(secretyKeyBytes, "HmacSHA256");
mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
}
private String hmac(String stringToSign) {
String signature = null;
byte[] data;
byte[] rawHmac;
try {
data = stringToSign.getBytes("UTF-8");
rawHmac = mac.doFinal(data);
signature = new String(Base64.encode(rawHmac, Base64.DEFAULT));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8" + " is unsupported!", e);
}
return signature;
}
private String percentEncodeRfc3986(String s) {
String out;
try {
out = URLEncoder.encode(s, "UTF-8").replace("+", "%20")
.replace("*", "%2A").replace("%7E", "~");
} catch (UnsupportedEncodingException e) {
out = s;
}
return out;
}
मैं अमेज़न S3 हस्ताक्षर परीक्षक इस्तेमाल किया, और मेरे स्ट्रिंग सही था, लेकिन मैं सही एन्कोडेड मूल्य कभी नहीं मिला। किसी भी मदद या सही दिशा में धक्का के लिए धन्यवाद।
मैं एक ही चीज़ के लिए एडब्ल्यूएस जावा एसडीके स्रोत पर एक नज़र डालेगा। Http://github.com/aws/aws-sdk-java पर ढूंढना आसान होना चाहिए। – jarmod
आप एसडीके का उपयोग क्यों नहीं करना चाहते हैं? इसमें हस्ताक्षर इत्यादि को संभालने के लिए कई बॉयलर प्लेट कोड शामिल हैं जो इन निम्न स्तर के विवरणों को संभालने से बचेंगे –
क्या आपके पास इसका समाधान है? मैं एसडीके के बिना एस 3 पर अपलोड करने की कोशिश कर रहा हूं। – dannyroa