在Rails 5

时间:2018-05-19 09:01:15

标签: ruby-on-rails paperclip

我正在使用React前端和Rails API,并且需要知道如何将附加了图像文件的前端创建的formdata转换为Rails控制器内的jpeg文件。

到目前为止,我已经能够将formdata路由到控制器,并且formdata看起来像在我的控制台中显示:

{\"file\"=>#<ActionDispatch::Http::UploadedFile:0x00007f9e3227fb28 @tempfile=#<Tempfile:/var/folders/7j/pqx3w4t571s4hrmdwcq3v6tm0000gn/T/RackMultipart20180519-97088-172hrqu.jpeg>, @original_filename=\"big_facade.jpeg\", @content_type=\"image/jpeg\", @headers=\"Content-Disposition: form-data; name=\\\"file\\\"; filename=\\\"big_facade.jpeg\\\"\\r\\nContent-Type: image/jpeg\\r\\n\">, \"format\"=>:json, \"controller\"=>\"api/v1/images/images\", \"action\"=>\"upload\"}

根据我的研究,这是可能的,但现有的文献只能说没有描述如何可能。

有人能指出我正确的方向还是让我知道代码?

我正在使用Rails中的Paperclip gem。

1 个答案:

答案 0 :(得分:1)

  def create_file
    unless params[:file].blank?
      uploaded_io = params[:file]
      path = Rails.root.join("public/system/temp_files/images", uploaded_io.original_filename)
      File.open(path, 'wb') do |file|
        file.write(uploaded_io.read)
      end
      if ExampleModel.create(image: Rails.root.join('public', path.to_s.split('/public/')[1]).open))
        File.delete(path)
      end
    end
  end

说明: -

1-首先,你必须创建物理文件以将其保存在数据库中,所以在这里我已经在项目的公共目录中创建了一个临时文件。

2-只需使用数据库的临时文件路径写入此文件。然后删除此临时物理文件。假设模型名称为ExampleModel并且有一个字段回形针的字段image