我正在使用carrierwave接受来自Python API的图像。我有以下代码:
def create
@person = Person.new(person_params)
respond_to do |format|
if @person.save
format.html { redirect_to @person, notice: 'Person was successfully created.' }
format.json { render :show, status: :created, location: @person }
else
format.html { render :new }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
def person_params
params.permit(:client_file_name, :name, :picture)
end
我不得不取出params.require(:person)
,因为我使用的名为requests
的Python库不允许您以该格式发送文件。
根据服务器日志,图像正在保存:
Started POST "/people" for 127.0.0.1 at 2017-11-19 11:49:19 -0500
Processing by PeopleController#create as */*
Parameters: {"picture"=>#<ActionDispatch::Http::UploadedFile:0x007fe5e8e900b8 @tempfile=#<Tempfile:/var/folders/77/2f_jjrld0dxgq3t8xv6clvph0000gn/T/RackMultipart20171119-13141-1nunpha.png>, @original_filename="Phil.png", @content_type=nil, @headers="Content-Disposition: form-data; name=\"picture\"; filename=\"Phil.png\"\r\n">}
(0.0ms) begin transaction
SQL (0.2ms) INSERT INTO "people" ("picture", "created_at", "updated_at") VALUES (?, ?, ?) [["picture", "Phil.png"], ["created_at", "2017-11-19 16:49:19.776189"], ["updated_at", "2017-11-19 16:49:19.776189"]]
(0.6ms) commit transaction
Redirected to http://localhost:3000/people/8
Completed 302 Found in 15ms (ActiveRecord: 1.5ms)
我只是在本地这样做。当我查看应该保存图像的目录时,有一个名为Phil.png
的图像,除了图像具有零字节之外应该发生的图像。
当我使用表单上传相同的图像时,一切都按预期工作。我该如何解决这个问题?
答案 0 :(得分:0)
所以我明白了。 Rails要求您将内容类型设置为image/png
,因此将其添加到请求可以解决问题。