我試圖使用回形針4.1.1將CSV文件附加到Rails3模型,但我無法獲取S3報告的內容類型爲text/csv
(而不是text/plain
)。當我隨後從S3下載文件時,擴展名將被更改爲匹配內容類型,而不是保留原始擴展名(因此test.csv將作爲test.txt下載)。通過回形針4連接時,在S3中設置內容類型?
從我所看到的,當您上傳文件時,FileAdapter將緩存創建時的內容類型以及由ContentTypeDetector(其調用file -b --mime filename
)確定的任何值。不幸的是,CSV文件返回text/plain
這是有道理的,因爲你如何真正區分這一點?嘗試使用attachment.instance_write(:content_type, 'text/csv')
設置內容類型只設置模型中的值,不影響寫入S3的內容類型。
FileAdapter的CONTENT_TYPE這裏初始化:https://github.com/thoughtbot/paperclip/blob/v4.0/lib/paperclip/io_adapters/file_adapter.rb#L14
呼叫創建將io_adapter: https://github.com/thoughtbot/paperclip/blob/v4.0/lib/paperclip/attachment.rb#L98
我真的有一個通用的上傳在這裏(所以我不能硬編碼在S3頭定義的內容類型在has_attached_file
),我並不是真的想要內容類型的欺騙保護。任何想法/建議?我寧願不降級到3.5,因爲這將意味着只是延緩了痛苦,但如果這是唯一的辦法,我就自娛自樂吧...
是否使用透霧S3或S3爲您的存儲供應商?您可以將一個lambda傳遞給s3_headers以確定是否應該覆蓋content_type值,但霧實現沒有等效值:fog_headers選項... – stereoscott
@stereoscott如果我通過Fog使用S3,是否有其他方法重寫標題? –
@charinten希望我的答案可以幫助你。 – stereoscott