carrierwave在Rails 5

时间:2017-11-19 16:52:51

标签: ruby-on-rails ruby-on-rails-5 carrierwave strong-parameters rails-api

我正在使用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的图像,除了图像具有零字节之外应该发生的图像。

当我使用表单上传相同的图像时,一切都按预期工作。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

所以我明白了。 Rails要求您将内容类型设置为image/png,因此将其添加到请求可以解决问题。