在我进入 Paperclip 或 CarrierWave 之前,我正在尝试使用边缘导轨指南(我正在使用 rails 4.0.0.rc1 和 ruby 1.9.3p362)使用Rails 中的表单助手来了解基本文件上传。
我将上传的方法直接放在控制器中的#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
,但在浏览器中出现编码错误:
Encoding::UndefinedConversionError
"\x89" from ASCII-8BIT to UTF-8
\x89 是文件名后缀上的点?即:.png
我发现一个 StackOverflow 帖子说将“b”添加到 File.open,它修复了编码错误,但我得到了一个不同的错误。这个StackOverflow 帖子涵盖了我的错误,但我相信我正在遵循解决方案并且仍然有错误。
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 之前,很高兴看到这项工作