2016-10-27 52 views
0

我需要上傳帶有.txt擴展名的附件,但通過file命令評估MIME類型「application/octet-stream」。該文件是由一臺設備自動生成的,在上傳之前重命名該文件是不可行的。我曾嘗試:回形針5.1內容類型驗證過於嚴格

class Book < ActiveRecord::Base 
    has_attached_file :excerpt 
    validates_attachment_content_type :excerpt, content_type: { content_typ: ["text/plain", "application/octet-stream"]} 
    validates_attachment_file_name :excerpt, matches: [/txt\z/] 
end 

但我總是得到一個錯誤檢測到的內容類型不匹配推斷內容類型:

Command :: file -b --mime '/tmp/313a40bb0448477e051da1e2cba2c20120161027-19345-lrhf6t.txt' 
[paperclip] Content Type Spoof: Filename Sample.txt (text/plain from Headers, ["text/plain"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination. 

該錯誤消息說,在文檔,以尋找一種方式以允許組合,但我一直無法找到任何看起來像解決方法。看到這discussion,但它是爲v4。

回答

2

難道是因爲拼寫錯誤content_type的關鍵? (你把它輸入爲content_typ

如果第一個建議是不行的,我覺得你的情況是,你要(根據自述的Security Validations部分說明)在config/initializers/paperclip.rb做到這一點:

Paperclip.options[:content_type_mappings] = { 
    txt: %w(text/plain application/octet-stream) 
} 
1

感謝您的指點,克里斯。猜猜我沒有仔細閱讀README文件的那一部分。 (順便說一句,固定錯字沒有任何區別。)

所以,解決辦法如下:

config/initializers/paperclip.rb

Paperclip.options[:content_type_mappings] = { 
    txt: %w(application/octet-stream) 
} 

在模型:

class Book < ActiveRecord::Base 
    has_attached_file :excerpt 
    validates_attachment_file_name :excerpt, matches: [/txt\z/] 
end 

無論實際的.txt文件是'text/plain'還是'application/octet-stream',這都有效。