คุณคิดว่าพวกเขาจะให้คนทั่วไปอ่านพฤติกรรมเริ่มต้นใช่ไหม :) ฉันแบ่งปันความไม่พอใจของคุณในขณะที่สร้าง API ที่กำหนดเองเพื่อเชื่อมต่อกับ S3 จากโซลูชัน C # นี่คือตัวอย่างข้อมูลที่อัปโหลดอ็อบเจ็กต์ 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 สิ่งต่างๆของปลั๊กและ DreamMessage อาจดูแปลกสำหรับคุณเนื่องจากเราใช้ Dream framework เพื่อปรับปรุงการสื่อสาร http ของเรา โดยพื้นฐานแล้วเรากำลังทำ http PUT ด้วยส่วนหัวที่ระบุและลายเซ็นส่วนหัวพิเศษตามข้อกำหนดของ aws (ดูหน้านี้ในเอกสาร awsสำหรับตัวอย่างวิธีสร้างส่วนหัวการอนุญาต)
หากต้องการเปลี่ยน ACL ของออบเจ็กต์ 1,000 รายการที่มีอยู่คุณสามารถเขียนสคริปต์ได้ แต่อาจจะง่ายกว่าถ้าใช้เครื่องมือ GUI เพื่อแก้ไขปัญหาเฉพาะหน้า สิ่งที่ดีที่สุดที่ฉันเคยใช้มาจาก บริษัท ชื่อcloudberryสำหรับ S3; ดูเหมือนว่าพวกเขามีการทดลองใช้ฟรี 15 วันสำหรับผลิตภัณฑ์อย่างน้อยหนึ่งอย่าง ฉันเพิ่งตรวจสอบแล้วว่าจะช่วยให้คุณสามารถเลือกหลายวัตถุพร้อมกันและตั้งค่า ACL เป็นสาธารณะผ่านเมนูบริบท สนุกกับคลาวด์!