我通过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
答案 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
虽然不确定是不是问题,但请告诉我你从中得到的结果。