我正在使用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。
答案 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