การเปลี่ยนประเภทเนื้อหาซ้ำสำหรับไฟล์ของส่วนขยายที่กำหนดใน Amazon S3


12

ฉันมีที่เก็บข้อมูล S3 ขนาดใหญ่ที่มีโครงสร้าง "โฟลเดอร์" ซ้อนอยู่ที่มีไฟล์ (.json) และ. md แบบคงที่ ไฟล์วิทยานิพนธ์ที่ถูกเสิร์ฟโดย S3 เป็นtext/plainมากกว่าที่ถูกต้องและapplication/jsontext/markdown

ฉันได้อัปเดตค่าเริ่มต้นที่เก็บข้อมูลเพื่อให้การอัปโหลดใหม่จะมีประเภทเนื้อหาที่ถูกต้อง

เป็นวิธีที่ดีที่สุดในการเดิน "ต้นไม้" และปรับปรุงประเภทเนื้อหาสำหรับไฟล์ที่ตรงกับส่วนขยายที่แน่นอนคืออะไร?

คำตอบ:


25

นี่คือตัวอย่างวิธีการทำสิ่งนี้ด้วยเครื่องมือ aws cli เครื่องมือ cp อนุญาตให้ใช้ตัวเลือกแบบเรียกซ้ำซึ่งฉันไม่คิดว่าเครื่องมือ s3api สามารถทำได้ ในกรณีนี้ฉันกำลังแก้ไขกลุ่ม SVG ลบตัวเลือก --dryrun เมื่อคุณพร้อมที่จะปล่อยมัน

aws s3 cp \
      --exclude "*" \
      --include "*.svg" \
      --content-type="image/svg+xml"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://mybucket/static/ \
       s3://mybucket/static/

ฉันเข้าใจแนวคิดพื้นฐานของคำสั่ง แต่สิ่งนี้จะลบเวอร์ชันของไฟล์เนื่องจากเป็นคำสั่งแทนที่หรือไม่ ที่ฝากข้อมูลของฉันถูกกำหนดค่าด้วยการกำหนดรุ่นและแต่ละไฟล์มีบางรุ่น การแทนที่มันจะลบเวอร์ชันทั้งหมดและสร้างไฟล์ใหม่หรือจะคำนึงถึงเวอร์ชันทั้งหมดในระหว่างการแทนที่หรือไม่
Joze

นั่นเป็นคำถามที่ดี คุ้มค่าการทดสอบแน่นอนในถังทิ้ง ความหวังของฉันคือการร้องขอให้แทนที่ข้อมูลเมตาเพียงอย่างเดียวจะไม่ทำให้รุ่นที่
เผยแพร่

ฉันทำการทดสอบและปรากฎว่ามีเวอร์ชันอยู่ แต่เวอร์ชันที่แก้ไขข้อมูลเมตาจะกลายเป็นเวอร์ชันล่าสุดเวอร์ชันเก่าจะมีข้อมูลเมตาก่อนหน้า ฉันพยายามที่จะหาวิธีที่จะซ้ำแก้ไขข้อมูลเมตาของทุกรุ่นในขณะนี้ที่เป็นโดยไม่ต้องทำสคริปต์ที่ซับซ้อนที่จะแสดงรายการทุกรุ่นแล้วปรับเปลี่ยนข้อมูลเมตาของ ...
Joze

คำสั่งนี้รีเซ็ต ACL หากคุณต้องการค่าที่ไม่ใช่ค่าเริ่มต้นให้เพิ่ม--acl=...
Vasiliy Zverev

3

นอกจากว่าคุณต้องการทำให้มือของคุณสกปรกโดยใช้ boto / python หรือ AWS API อื่นฉันสงสัยว่าทางออกที่ดีที่สุดของคุณคือใช้$ aws s3api copy-objectกับการ--content-typeตั้งค่าสถานะเพื่อคัดลอกวัตถุไปยังตัวเองการตั้งค่าประเภทเนื้อหาใหม่

นี่คือเอกสารสำหรับ s3api

มันจะไปโดยไม่บอกว่าคุณควรทดสอบนี้ก่อนที่จะรันซ้ำในถังของคุณทั้งหมด


1
เกี่ยวกับการทดสอบใช้แฟล็ก "dry run" ใน Amazon CLI
บาร์ต

3

หลังจากการขุดผมพบว่าs3cmdเครื่องมือสามารถทำได้ ตัวอย่างเช่นหากต้องการตั้งค่าไฟล์ JSON เป็น application / json:

s3cmd --recursive modify --acl-public \
       --add-header='content-type':'application/json' \
       --exclude '' --include '.json' \
       s3://bucket/

3

ตามที่กล่าวไว้ก่อนหน้านี้คุณสามารถใช้awsเครื่องมือโดย Amazon และใช้ s3api เพื่อคัดลอกวัตถุไปยังตัวเองและใช้metadata-directive=REPLACEเพื่อเปลี่ยนประเภทเนื้อหา

ฉันใส่ที่นี่เพราะบางครั้งคุณต้องการที่จะทำซ้ำในชื่อไฟล์ที่เก็บไว้ในฐานข้อมูลและนี่คือวิธีที่คุณสามารถทำได้ผ่าน CLI

aws s3api copy-object \
          --content-type="application/vnd.android.package-archive" \
          --metadata-directive="REPLACE" \
          --copy-source "MYBUCKET/FILE.apk" \
          --bucket "MYBUCKET" \
          --key "FILE.apk" \
          --acl public-read

สิ่งนี้แทนที่ไฟล์เดียว คุณเรียกใช้งานคำสั่งนี้กับไฟล์ประเภท. apk ได้อย่างไร?
บาร์ต

@bart ดูคำตอบของฉันสำหรับวิธีแบบเรียกซ้ำ
t1m0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.