Geniş bir yerel dosyam var. Bu dosyanın gzipli bir sürümünü boto
kütüphanesini kullanarak S3'e yüklemek istiyorum. Dosya, yüklemeden önce disk üzerinde verimli bir şekilde sıkıştırmak için çok büyüktür, bu nedenle yükleme sırasında akış halinde bir şekilde gzip olmalıdır.Boto kullanarak yükleme yaparken gzip nasıl yapılır
boto
kitaplığı, okunacak dosya benzeri bir nesne olmasını bekler. set_contents_from_file()
.
gzip
kitaplığı, fileobj
; Sıkıştığında bu nesneye yazacaktır.
Bu iki işlevi birleştirmek istiyorum, ancak bir API kendi başına okumak istiyor, diğer API kendi başına yazmak istiyor; ne pasif bir operasyonu biliyor (ne yazılıyor hem de okunıyor gibi).
Bunların çalışma şekliyle nasıl birleştirileceği hakkında bir fikri olan var mı?
DÜZENLEME: Bir yanıtı (aşağıya bakın) kabul ediyorum çünkü nereye gideceğimi bildiriyor, ancak aynı soruna sahipseniz, kendi yanıtımı (ayrıca aşağıda) daha yararlı buluyor olabilirsiniz, çünkü Çok parçalı yüklemeler.
S3 yükleme gerçekten değer boyutunu bilmek gerekecek mi? Bu gerçekten depolama sırasında hiçbir akış sıkıştırmanın gerçekleştirilemeyeceği anlamına gelir. Bunu kontrol edeceğim. – Alfe
boto-s3-bucket-tuşlarında 'set_contents_from_stream()' vardır. Bu akıştaki en az ipucu mümkün olmalı, sence de öyle değil mi? – Alfe
Kendi belgelerinden: 'Akış nesnesi aranabilir değil ve toplam boyut bilinmemektedir. Bu, üstbilgideki İçerik Boyutu ve Content-MD5'i belirleyemeyeceğimiz bir içeriğe sahiptir. Bu nedenle, büyük yüklemeleri için, MD5 hesaplamasındaki gecikmeden sakınılır, ancak yüklenen verilerinin bütünlüğünü doğrulayamama nedeniyle cezalandırılır. – Alfe