我有一个自定义文件类型(.map),我从Gzip文件解压缩然后写入新文件,以便将其传递给Paperclip并上传到s3。我的问题是类型应该是一个xml,而它保存为文本文档而不是所有的xml格式都正确。我需要一种方法将其转换为xml类型,然后将其保存为新的File对象,然后再传递它。
到目前为止,这是我的代码:
Zlib::GzipReader.open(f.tempfile) do |gz|
puts gz.orig_name
@tmp = File.new(gz.orig_name, "w+")
while chunk = gz.read(16*1024) do
@tmp.write(chunk)
end
end
reader = @tmp.read
s = location.posts.create!(
subject: @email.subject,
from: @email.from[:email],
mapfile: @tmp)
}
理想情况下,我将传递mapfile xml类型文件,但现在它似乎是文本
更新:
所以现在我已经设置了post.rb来执行此操作,并为包含原始文件名的帖子添加了name属性:
has_attached_file :mapfile,
:preserve_files => "true",
:path =>
':rails_root/non-public/system/:id/:basename.:extension',
:url => '/:class/:id/mapfiles',
:s3_headers => lambda { |attachment| {'Content-Disposition' => "attachment; filename = #{attachment.name}"}}
这完美无缺!
答案 0 :(得分:2)
听起来你在谈论'Content-Type'。将文件保存到文件系统时,无法设置:系统将根据文件扩展名决定使用什么,并且可能通过分析内容(如果是文本文件)来决定。
但是,您可以在将文件提供给某人的浏览器时以及将其上传到S3时设置内容类型。请参阅此处了解后者Setting the Content-Type in direct to S3 upload using Rails and jQuery File Upload