使用paperclip设置docx的内容配置

时间:2011-12-06 07:01:28

标签: ruby-on-rails amazon-s3 paperclip

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文件的形式下载。有没有办法正确地做到这一点。

4 个答案:

答案 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