【问题标题】:How do I get Zlib to compress to a stream in Ruby?如何让 Zlib 压缩到 Ruby 中的流?
【发布时间】:2011-12-09 22:34:52
【问题描述】:

我正在尝试使用 AWS::S3 将文件上传到 Amazon S3,但我想先使用 Zlib 压缩它们。 AWS::S3 期望它的数据是一个流对象,即你通常会上传一个类似

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

(对不起,如果我的术语有问题;我实际上对 Ruby 了解不多。)我知道我可以用类似的东西 zlib 压缩文件

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

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

【问题讨论】:

    标签: ruby amazon-s3


    【解决方案1】:

    我认为我之前的问题不是我向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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多