如何从自定义POST操作中保存Carrierwave中的文件?

时间:2016-06-30 08:58:02

标签: ruby-on-rails carrierwave

我通过POST操作在Controller中制作自定义文件上传器。它所做的只是接收一个文件,并使用带有文件URL的JSON进行响应(如果成功保存)。

如何使用CarrierWave保存文件?

我创建了一个名为DocUploader的CarrierWave上传器,以及一个名为Fileuploader的Controller。我有一个脚本,通过发送params[:file]将文件发送到此Controller。 DocUploader没有绑定任何模型,它只是保存文件而没有相应的数据库记录。

在我的routes.rb中:

post 'fileuploader/upload'

在Fileuploader控制器中我试过这样的事情,但显然不起作用:

def upload
  new=DocUploader.new

  respond_to do |format|
    if new.store!(params[:file])
      format.json { render json: {
          success: 1,
          link: new.url
      }.to_json }
    else
      format.json { render json: { success: 0 }.to_json }
    end
  end
end

我当然得到0的答复。

做正确的方法是什么?

编辑:

这是我从日志中得到的:

Started POST "/fileuploader/upload" for 127.0.0.1 at 2016-06-30 01:57:15 -0700
  ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by FileuploaderController#upload as JSON
  Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x00000004ce4088 @tempfile=#<Tempfile:/tmp/RackMultipart20160630-24437-1knyrvj.jpg>, @original_filename="YTehnUF.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"YTehnUF.jpg\"\r\nContent-Type: image/jpeg\r\n">}
Completed 200 OK in 377ms (Views: 0.1ms | ActiveRecord: 0.5ms)

DocUploader的内容非常标准,但在这里:

class DocUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :file

  def store_dir
    "static/files"
  end

  version :thumb do
    process resize_to_fit: [nil, 150]
  end

  def extension_whitelist
    %w(jpg jpeg gif png)
  end

end

1 个答案:

答案 0 :(得分:0)

我认为您应该更改格式助手:

def upload
  new=DocUploader.new

  respond_to do |format|
    if new.store!(params[:file])
      format.json { render json: {
          success: 1,
          link: new.url
      } }
    else
      format.json { render json: { success: 0 } }
    end
  end
end

虽然不确定是不是问题,但请告诉我你从中得到的结果。