我正在使用Rails 3,Uploadify将图像发送到S3。
现在上传的所有图片都有MIME:application / octet-stream
我想解决这个问题但是我收到了以下错误:
NoMethodError (undefined method `original_filename' for #<ActiveSupport::HashWithIndifferentAccess:0x107c81998>):
app/models/photo.rb:29:in `upload_file='
app/controllers/photos_controller.rb:15:in `upload'
app/middleware/flash_session_cookie_middleware.rb:14:in `call'
我认为这是因为所有教程都没有Rails 3友好。有人有主意吗?这是代码:
# Controller
def create
@photo = Photo.new(:upload_file => params[:photo][:image])
...
end
# Model
class Photo < ActiveRecord::Base
require 'mime/types'
...
def upload_file=(data)
data.content_type = MIME::Types.type_for(data.original_filename).to_s
self.image = data
end
end
答案 0 :(得分:1)
我不熟悉Uploadify,但它似乎只是一个javascript生成器......
您正在为#upload_file =传递一个params值作为'data'。然后你在params [:photo] [:image]上调用一个方法(#original_filename)。 Rails说params [:photo] [:image]没有这样的方法。
'mime / types'中是否有某种File类?你应该先创建那个File对象吗?
file = File.new(params[:photo][:image])
然后更改该文件属性:
file.content_type = ...
编辑:
您使用的是回形针宝石吗?您正在使用的教程是使用paperclip。所以在“@ asset.file_content_type = MIME :: Types.type_for(@ asset.original_filename)。to_s”中,我认为@asset是paperclip的File类的一个实例,它有一个#original_filename方法。但是,我没有在回形针文档中看到#file_content_type =()方法。