2011-12-06 18 views
1

Content-Dispositionをdocxファイルにs3で追加しようとしています。次の行に沿って何か:Content-Disposition: attachment; filename="filename.docx"。 IE(< 9)がzipファイルとしてdocxファイルをダウンロードするので、私はこれをしたいと思います。いくつかのグーグルで私は、これに対処方法があることを発見しました。コンテンツにcontent-dispositionを追加しました。私はそれはまだzipファイルとしてダウンロードし、バックbefore_post_processコールを使用してみましたし、ペーパークリップを使用してdocxのコンテンツ設定を設定する

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 

をしました。しかし。これを正しく行う方法はありますか?

答えて

1

パッチなしでそこにペーパークリップを、ファイル名を配置する方法を見つけ出す...紙でbefore_post_processコールバックありクリップ宝石。

は、我々はこのような何かを行うことができます...私のために動作しませんでした(オプションを編集する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 
+0

これは '.merge! 'でなければなりません –

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 
+0

:あなたのhas_attached_fileコールのオプションのハッシュでs3_headersキー:あなたは直接PROCを渡すことができます。 –

+0

私はうまくいきましたが、S3から保存されて提供されたファイルに対して正しいContent-Typeをまだ使用しています。 –

0

プロザック、

s3_headerハッシュが、私はまだ「でき補間されていないことを考えると、私はハッシュ[「のContent-処分」]ペーパークリップであなたがs3_header設定する必要があることだと思うが、私は同じ問題によtは

チェックこのソリューション私は最終的に方法を見つけたhttp://groups.google.com/group/paperclip-plugin/browse_thread/thread/bff66a0672a3159b

+0

はい、あなたは正しいです。私の答えを確認してください。 –

+0

prozacを見つけるのが大好きですが、私は少し異なったシナリオがあります。私はカスタムプロセッサを持っています。私はあなたがここで返答するものを実装しようとしていました。しかしbefore_post_processカスタムプロセッサがある場合は実行されません。カスタムプロセッサと一緒にそれをどうやって行うのか考えていますか? –

8

プロザックの答えを。しかし、とにかくもっと簡単な方法があります。私たちは、サーバーからファイルを提供するとき、あなたが言及したSOLNは..です私の答えをチェックしてください

has_attached_file :attachment, { 
    ..., 
    :s3_headers => lambda { |attachment| 
    # pass whatever you want in place of "attachment.name" 
    { "Content-Disposition" => "attachment; filename=\"#{attachment.name}\"" } 
    }, 
    ... 
} 
+0

ありがとう、ごくわずかなコメントです。ルビでエスケープするのを避ける方法があります。たとえば、' ''を既に持っていても、 '%(attachment; filename =" #{attachment.name} ")' – ecoologic

+0

最近のPaperclipでは、このprocは添付ファイルが作成される前に実行されているようです。 "document_file_size":null、 "document_updated_at":null、 "solution_id":null、 "user_id":null、 "created_at":null、 "ドキュメント_ファイル名" null、 "updated_at":null} '' 'Content-Dispositionを動的に設定できるように一度設定された添付ファイルの詳細を取得する方法はありますか? –

関連する問題