Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Zlib在Ruby中压缩成流?_Ruby_Amazon S3 - Fatal编程技术网

如何让Zlib在Ruby中压缩成流?

如何让Zlib在Ruby中压缩成流?,ruby,amazon-s3,Ruby,Amazon S3,我正在尝试使用将文件上载到AmazonS3,但我想先用Zlib压缩它们。AWS::S3希望它的数据是一个流对象,也就是说,您通常会上传一个包含以下内容的文件 AWS::S3::S3Object.store('remote-filename.txt', open('local-file.txt'), 'bucket') data = Zlib::Deflate.deflate(File.read('local-file.txt')) (如果我的术语不适用,很抱歉;我实际上对Ruby了解不多。)

我正在尝试使用将文件上载到AmazonS3,但我想先用Zlib压缩它们。AWS::S3希望它的数据是一个流对象,也就是说,您通常会上传一个包含以下内容的文件

AWS::S3::S3Object.store('remote-filename.txt', open('local-file.txt'), 'bucket')
data = Zlib::Deflate.deflate(File.read('local-file.txt'))
(如果我的术语不适用,很抱歉;我实际上对Ruby了解不多。)我知道我可以用类似于

AWS::S3::S3Object.store('remote-filename.txt', open('local-file.txt'), 'bucket')
data = Zlib::Deflate.deflate(File.read('local-file.txt'))

但是将
data
作为第二个参数传递给
S3Object.store
似乎并不像我想的那样。(上传很顺利,但当我尝试从web浏览器访问文件时,它不会正确返回。)我如何让Zlib压缩到流,或任何类型的对象
S3Object.store
想要的对象?

我想我以前的问题不是我将错误类型的对象传递到
S3Object.store
,但是我生成的是一个zlib压缩数据流,没有通常在
.gz
文件中找到的头。在任何情况下,以下措施都有效:

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')