我使用的Rails 3,Uploadify,将图像发送到S3。

现在所有被上载的图像具有MIME:应用/八位字节流

我想解决这个问题,但我发现了以下错误:

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 
有帮助吗?

解决方案

我不熟悉Uploadify,但它似乎只是一个JavaScript生成...

您正在在传递一个PARAMS值作为#upload_file =“数据”。然后你调用上PARAMS的方法(#original_filename):照片] [:图片]。导轨是说,PARAMS [:相片] [:图片]不具有这样的方法

是否有“哑剧/类型”某种File类的?如果您首先创建一个文件对象?

file = File.new(params[:photo][:image])

,然后改变该文件属性:

file.content_type = ...

编辑:

您使用回形针宝石?本教程所使用的曲别针使用。因此,在“@ asset.file_content_type = MIME :: Types.type_for(@ asset.original_filename).to_s”,我觉得@asset是回形针的文件类的一个实例,它确实有一个#original_filename方法。但是,看不到在纸夹文档一个#file_content_type =()方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top