我們的用戶有兩種上傳圖片的方式。一個是通過一個簡單的HTML表單,另一個是通過名爲Aurigma的iPhone應用程序。我們使用Paperclip處理圖像並將它們存儲在S3上。使用Aurigma上傳的圖像最終具有錯誤的內容類型,導致它們作爲應用程序打開。如何解決Aurigma上傳到S3的內容類型?
我試過兩種解決方案:
before_save :set_content_type
def set_content_type
self.image.instance_write(:content_type,"image/png")
end
和:
before_post_process :set_content_type
def set_content_type
self.image.instance_write(:content_type, MIME::Types.type_for(self.image_file_name).to_s)
end
看來,如果這兩種解決方案被忽略。
使用回形針版本3.0.2,Aurigma版本1.3和我從iPhone上傳截圖。這是我的回形針配置:
has_attached_file :image, {
:convert_options => { :all => '-auto-orient' },
:styles => {
:iphone3 => "150x150",
:web => "300x300"
},
:storage => :s3,
:bucket => ENV['S3_BUCKET'],
:s3_credentials => {
:access_key_id => ENV['S3_KEY'],
:secret_access_key => ENV['S3_SECRET']
},
:path => "/pictures/:id/:style.:extension",
:url => "/pictures/:id/:style.:extension"}
}
謝謝,但我不知道如何實現這一點。我只是將我的Paperclip配置添加到我的問題中。回形針處理與S3的交互,所以我不知道要訪問存儲桶並找到我的對象。 或者你是否建議我直接訪問S3寶石桶,以某種方式檢索圖像,然後修改內容類型? –
@SjorsProvoost - 要清楚我不是一個紅寶石開發人員,所以你必須填寫空白...當上傳文件,你設置內容類型使用Aurigma或Paperclip - 我會驚訝,如果兩個didn沒有選擇來設置這個。它看起來像Paperclip基於擴展名設置它,但這可能有助於覆蓋它,如果有必要:http://stackoverflow.com/questions/2581157/overriding-content-type-for-rails-paperclip-plugin。否則,我會直接使用AWS SDK將S3中的文件(自身)複製並設置正確的「內容類型」。 –
或使用ASW SDK生成您在網站上使用的網址,並在url中設置「content-type」。這不會改變S3上設置的內容,而只是以不同的內容類型來提供文件。我懷疑回形針可能有選擇爲你做這個...對不起,我不能更具體。 –