อนุญาตให้ gzip กับไฟล์ที่มีอยู่

ฉันมีเนื้อหาคงที่เก็บไว้ใน GCS และฉันต้องการให้บริการในรูปแบบ gzip (แต่อัปโหลดโดยไม่มีการบีบอัด) มีวิธีใดที่จะตั้งค่าไฟล์ให้บีบอัดโดยไม่ต้องดาวน์โหลดและอัปโหลดใหม่ในรูปแบบ gzipped หรือไม่

ฉันพยายามตั้งค่าส่วนหัวการเข้ารหัสเนื้อหาด้วย gsutil (เช่น gsutil setmeta -h 'Content-Encoding:gzip' <some_object_uri> แต่มันเพิ่งนำไปสู่ ​​"บริการไม่พร้อมใช้งาน" ในไฟล์ (ซึ่งฉันคิดว่ามาจากเซิร์ฟเวอร์ที่พยายามคลายซิปไฟล์และล้มเหลวหรืออะไรทำนองนั้น)


person Jeff Tratner    schedule 25.10.2014    source แหล่งที่มา


คำตอบ (1)


ไม่มีวิธีใดในการบีบอัดออบเจ็กต์โดยไม่ต้องดาวน์โหลดและอัปโหลดใหม่

อย่างไรก็ตาม คุณสามารถให้ gsutil ทำสิ่งนี้ให้คุณได้ และหากคุณเรียกใช้จาก Google Compute Engine (GCE) Virtual Machine (VM) คุณจะถูกเรียกเก็บเงินเฉพาะจำนวนการดำเนินการเท่านั้น ไม่ใช่สำหรับแบนด์วิดท์

นอกจากนี้ เกี่ยวกับการตั้งค่าส่วนหัวการเข้ารหัสเนื้อหาด้วย setmeta คุณตีความสิ่งที่เกิดขึ้นได้ถูกต้อง คุณตั้งค่าข้อมูลเมตาบนออบเจ็กต์เพื่อระบุว่ามีข้อมูล gzip แต่เนื้อหาไม่มีสตรีม gzip ที่ถูกต้อง ดังนั้นเมื่อคุณพยายามดาวน์โหลดด้วย Accept-Encoding: gzip บริการ GCS จะพยายามขยายขนาดสตรีมและล้มเหลว

ฉันขอแนะนำให้ดาวน์โหลดที่เก็บข้อมูลไปยังดิสก์ในเครื่องบน GCE VM:

gsutil cp -r gs://bucket /path/to/local/disk

จากนั้นใช้ตัวเลือก -z เพื่อระบุนามสกุลไฟล์ที่ต้องการ gzip:

gsutil cp -z js,css,html -r /path/to/local/disk gs://bucket
person jterrace    schedule 27.10.2014
comment
อืม ฉันคิดว่าฉันสามารถใช้ประโยชน์จาก API การแจ้งเตือนวัตถุเพื่อดาวน์โหลดแล้วอัปโหลดไฟล์ gzipped อีกครั้งในแต่ละครั้ง (เนื่องจากฉันยอมรับไฟล์ผ่านตัวจัดการ blobstore ของ App Engine) - person Jeff Tratner; 27.10.2014