आपको लगता है कि वे सार्वजनिक रूप से डिफ़ॉल्ट व्यवहार को पढ़ेंगे, क्या आप नहीं करेंगे? :) मैंने C # समाधान से S3 के साथ इंटरफेस करने के लिए एक कस्टम एपीआई का निर्माण करते हुए आपकी निराशा को साझा किया। यहां वह स्निपेट है जो S3 ऑब्जेक्ट को अपलोड करने और डिफ़ॉल्ट रूप से सार्वजनिक-पढ़ने के लिए इसे सेट करने के लिए पूरा करता है:
public void Put(string bucketName, string id, byte[] bytes, string contentType, S3ACLType acl) {
string uri = String.Format("https://{0}/{1}", BASE_SERVICE_URL, bucketName.ToLower());
DreamMessage msg = DreamMessage.Ok(MimeType.BINARY, bytes);
msg.Headers[DreamHeaders.CONTENT_TYPE] = contentType;
msg.Headers[DreamHeaders.EXPECT] = "100-continue";
msg.Headers[AWS_ACL_HEADER] = ToACLString(acl);
try {
Plug s3Client = Plug.New(uri).WithPreHandler(S3AuthenticationHeader);
s3Client.At(id).Put(msg);
} catch (Exception ex) {
throw new ApplicationException(String.Format("S3 upload error: {0}", ex.Message));
}
}
TOACLString (acl) फ़ंक्शन सार्वजनिक रूप से पढ़ा जाता है , BASE_SERVICE_URL s3.amazonaws.com है और AWS_ACL_HEADER निरंतर x-amz-acl है । प्लग और ड्रीममैसेज का सामान आपको अजीब लगेगा, क्योंकि हम अपने http संचार को कारगर बनाने के लिए ड्रीम फ्रेमवर्क का उपयोग कर रहे हैं। अनिवार्य रूप से हम निर्दिष्ट शीर्ष लेखों के साथ http PUT कर रहे हैं और aws विनिर्देशों के अनुसार एक विशेष शीर्षक हस्ताक्षर ( प्राधिकरण शीर्ष लेख का निर्माण करने के तरीकों के लिए aws डॉक्स में यह पृष्ठ देखें )।
मौजूदा 1000 ऑब्जेक्ट ACL को बदलने के लिए आप एक स्क्रिप्ट लिख सकते हैं लेकिन तत्काल समस्या को ठीक करने के लिए GUI टूल का उपयोग करना आसान है। अब तक मैंने जो सबसे अच्छा उपयोग किया है वह S3 के लिए क्लाउडबेरी नामक कंपनी से है ; ऐसा लगता है कि उनके पास कम से कम एक उत्पाद के लिए 15 दिनों का नि: शुल्क परीक्षण है। मैंने अभी सत्यापित किया है कि यह आपको एक साथ कई वस्तुओं का चयन करने और संदर्भ मेनू के माध्यम से अपने एसीएल को सार्वजनिक करने की अनुमति देगा। बादल का आनंद लें!