Iam尝试将Content-Disposition
添加到s3中的docx文件中。类似于Content-Disposition: attachment; filename="filename.docx"
的内容。我想这样做是因为IE(< 9)将docx文件作为zip文件下载。经过一些谷歌搜索后,我发现有一个解决方法,通过在内容中添加content-disposition
。我尝试使用before_post_process
回拨并执行了
before_post_process :set_content_disposition
def set_content_disposition
filename = self.attachment.instance.attachment_file_name
self.attachment.instance_write(:content_disposition, "attachment; filename="+filename)
end
但是,它仍然以zip文件的形式下载。有没有办法正确地做到这一点。
答案 0 :(得分:9)
Prozac的答案(使用before_post_process编辑选项)对我不起作用。但是,无论如何,现在有一种更简单的方法。您可以将proc直接传递给has_attached_file调用的选项哈希中的:s3_headers键:
has_attached_file :attachment, {
...,
:s3_headers => lambda { |attachment|
# pass whatever you want in place of "attachment.name"
{ "Content-Disposition" => "attachment; filename=\"#{attachment.name}\"" }
},
...
}
答案 1 :(得分:3)
我终于找到了一种方法..使用paperclip gem有一个 before_post_process 回调。
我们可以做这样的事情......
has_attached_file :sample
before_post_process :set_content_dispositon
def set_content_dispositon
self.sample.options.merge({:s3_headers => {"Content-Disposition" => "attachment; filename="+self.sample_file_name}})
end
答案 2 :(得分:0)
我无法帮助您使用回形针,但docx
文件的正确 MIME类型/内容类型为 application/vnd.openxmlformats-officedocument.wordprocessingml.document
。
使用它将阻止IE将其下载为zip文件。
以下是新办公室格式的所有MIME类型。
Extension MIME Type
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
.potx application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.sldx application/vnd.openxmlformats-officedocument.presentationml.slide
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
.xlam application/vnd.ms-excel.addin.macroEnabled.12
.xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12
答案 3 :(得分:0)
百忧解,
我认为在Paperclip中你必须设置s3_header ['Content-Disposition']哈希,但是我在同一个问题中,因为没有插入s3_header哈希我仍然无法弄清楚如何将文件名放在那里补丁Paperclip
检查此解决方案http://groups.google.com/group/paperclip-plugin/browse_thread/thread/bff66a0672a3159b