Varsayılan davranışı halka okutacaklarını düşünürsünüz, değil mi? :) Bir C # çözümünden S3 ile arabirim oluşturmak için özel bir API oluştururken hayal kırıklığınızı paylaştım. İşte bir S3 nesnesini yüklemeyi ve onu varsayılan olarak herkese açık erişime ayarlamayı başaran snippet:
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) işlevi döner halka okunması , BASE_SERVICE_URL olan s3.amazonaws.com ve AWS_ACL_HEADER sabit x amz-ACL . Eklenti ve DreamMessage öğeleri, http iletişimimizi kolaylaştırmak için Dream çerçevesini kullandığımız için muhtemelen size garip görünecektir. Esasen, belirtilen başlıklar ve aws belirtimlerine göre özel bir başlık imzasıyla bir http PUT yapıyoruz ( aws belgelerinde bu sayfaya bakın) yetkilendirme başlığının nasıl oluşturulacağına ilişkin örnekler ).
Mevcut 1000 nesne ACL'sini değiştirmek için bir komut dosyası yazabilirsiniz, ancak acil sorunu çözmek için bir GUI aracı kullanmak muhtemelen daha kolaydır. Şimdiye kadar kullandığım en iyisi S3 için cloudberry adlı bir şirketten ; Görünüşe göre ürünlerinden en az biri için 15 günlük ücretsiz deneme süreleri var. Bir kerede birden fazla nesneyi seçmenize ve içerik menüsü aracılığıyla ACL'lerini herkese açık olarak ayarlamanıza izin vereceğini doğruladım. Bulutun tadını çıkarın!