gpt4 book ai didi

file-upload - 使用表单助手在 Rails 中上传基本文件

转载 作者:行者123 更新时间:2023-12-02 02:02:21 25 4
gpt4 key购买 nike

我正在尝试使用 edge rails guide 了解使用 Rails 中的表单助手进行基本文件上传(在使用 Paperclip 或 CarrierWave 之前,我使用的是 rails 4.0.0.rc1 和 ruby​​ 1.9.3p362。

我将上传方法与 Controller 中的#create 放在一起,我的计划是使用存储上传文件名的 :image 列创建新记录。

我的#create 有这个:

File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
file.write(uploaded_io.read)
end

当我完全按照 Rails 指南进行文件上传时,我可以在我的 public/uploads 中看到该文件,但我在浏览器中遇到编码错误:
编码::UndefinedConversionError
"\x89"从 ASCII-8BIT 到 UTF-8

\x89 是文件名后缀上的点?即:.png

我发现一个 StackOverflow 帖子说将“b”添加到 File.open,它修复了编码错误,但我得到了一个不同的错误。这StackOverflow post涵盖了我的错误,但我相信我正在遵循解决方案并且仍然有错误。

File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
file.write(uploaded_io.read)
end

我收到以下 TypeError,但没有编码错误。另一方面,文件上传。

TypeError: can't cast ActionDispatch::Http::UploadedFile to string:

对我做错了什么有什么建议吗?在我转向 Paperclip 或 CW 之前看到这项工作会很高兴

最佳答案

我发现我正在使用 :image 列进行上传,但在上传过程中 :image 不是 :string,它是一个 ActionDispatch::Http::UploadedFile 对象(对吧?)。在数据库中,:image 列字段类型是 :string。所以我想在 :image 中存储的是 uploaded_io.original_filename

我第一个让它工作的解决方案是不使用 ':image' 作为 form_for 中的 f.file_field。我将其称为 :filename,然后从该对象中获取 uploaded_io.original_filename 并将其存储在 :image 中,然后进行保存.

这很丑陋,但它确实有效。

uploaded_io = params[:piture][:filename]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
file.write(uploaded_io.read)
end
@picture.image = uploaded_io.original_filename

我对 file.write(upload_io.read) 和 File.open(...) 还是有点模糊

关于file-upload - 使用表单助手在 Rails 中上传基本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16637140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com