检索传入的照片 gzip - Rails 控制器

Retrieving incoming gzip of photos - Rails Controller

我正在尝试抓取一个包含照片的传入 gzip 文件,我想提取这个 gzip 文件并将每张照片上传到 s3。上传不是我的问题,我不确定如何正确解析传入的 gzip 并获取照片。

这是我目前在我的控制器中的内容。

raw_gzip_file = request.raw_post
photos = Zlib::GzipReader.open(gzip_file)
photos.each{|photo| s3.upload(photo)}

但是我收到的错误范围是(没有将 StringIO 隐式转换为字符串)和(字符串包含空字节)

如有任何帮助或建议,我们将不胜感激。

您可以使用需要文件名的 open 方法或需要包含数据的 IO 的 new 方法创建 GzipReader。

raw_post returns 是一个字符串,因此您将实际的原始数据传递给需要文件名的方法。您可以将它包装在 StringIO 中,然后使用 open 但是 request 上已经有一个方法可以做到这一点(或者 return 底层输入,如果它还没有被读取)

reader = Zlib::GzipReader.new(request.body)

只有当正文确实只包含 gzip 数据时,这才是正确的。例如,如果请求是由浏览器提交的带有文件输入的表单发出的,那么文件数据将在 params 中,就像正常的表单输入一样(原始 post 数据将包含多部分GzipReader 无法处理的 mime 消息)

完成所有这些后,您将 运行 了解 Ruby 的 gzip 库不支持单个存档中的多个文件这一事实(参见 issue)。如果你能让人们上传 zip 文件(可能对消费者更友好),那么 ruby​​zip gem 可以处理那些