2011-12-09 3 views
0

AWS::S3을 사용하여 Amazon S3에 파일을 업로드하려하지만 먼저 Zlib로 압축하려고합니다. AWS는 :: S3, 당신은 일반적으로 Zlib을 Ruby에서 스트림으로 압축하려면 어떻게해야합니까?

AWS::S3::S3Object.store('remote-filename.txt', open('local-file.txt'), 'bucket') 

같은 것을 사용하여 파일을 업로드하는 것, 즉 데이터가 스트림 객체가 될 것으로 예상 (내 용어가 꺼져 있으면 죄송합니다,. 실제로 루비에 대해 잘 모르는) I 내가

data = Zlib::Deflate.deflate(File.read('local-file.txt')) 

같은 것을 가진 파일을 ZLIB - 압축 할 수 있지만 S3Object.store에 두 번째 인수로 data를 전달하는 것은 내가이하는 무슨 생각하지 않는 것 같습니다 것을 알고있다. (업로드는 정상적으로 진행되지만 웹 브라우저에서 파일에 액세스하려고하면 올바르게 돌아 가지 않습니다.) Zlib을 스트림으로 수축 시키려면 어떻게해야합니까? 아니면 S3Object.store이 원하는 모든 종류의 객체를 얻으려면 어떻게해야합니까?

답변

1

내 문제는 내가 잘못된 종류의 것을 S3Object.store에 전달하는 것이 아니라, 보통 .gz 파일에서 찾을 수있는 헤더없이 zlib 압축 된 데이터 스트림을 생성하고 있다는 것입니다. 어떤 경우에도 다음 작업이 수행되었습니다.

str = StringIO.new() 
gz = Zlib::GzipWriter.new(str) 
gz.write File.read('local-file.txt') 
gz.close 

AWS::S3::S3Object.store('remote-filename.txt', str.string, 'bucket') 
관련 문제