2

我想在 Rails 3.2.8 上使用 tag_form 制作一个简单的文件上传器。
但是当我尝试提交图像文件时,我收到一条

错误消息(当我尝试提交图像文件时)

CoursesController#attachment 中的 NoMethodError
未定义方法“original_filename”,用于“2012-03-02 21.53.55.jpg”:字符串

----- BEGIN PS(20121216 19:32) -----
错误消息(当我在 show.html.erb 上添加“:multipart => true”时)

从 ASCII-8BIT 到 UTF-8 CoursesController#attachment
"\xFF"中的编码::UndefinedConversionError

----- END PS -----

似乎程序将文件视为字符串?
视图文件中可能存在一些问题。

如果您能帮我解决这个问题,我将不胜感激。这是我的代码。


应用程序/视图/show.html.erb

<%= form_tag(attachment_course_path, :action=>'attachment') do %>
<div class="field">
  <%= label_tag :file %>
  <%= file_field_tag :file %>
</div>
<div class="actions">
  <%= submit_tag 'Submit' %>
</div>
<% end %>


应用程序/控制器/courses_controller.rb

def attachment
  t = Time.now.strftime("%Y%m%d%H%M%S")
  uploaded_io = params[:file]
  File.open(Rails.root.join('public', 'upload', uploaded_io.original_filename), 'w') do |file|
    file.write(uploaded_io.read)
  end
end


配置/路由.rb

resources :courses, :only => [ :show ] do
  member do
    post :attachment
  end
end
4

2 回答 2

3

似乎表单没有发送带有请求的文件。您需要在 form_tag 中设置 :multipart => true。

于 2012-12-16T08:18:46.570 回答
0

问题似乎类似于RoR upload Undefined encoding conversion

设置后:multipart => trueform_tag您需要以二进制模式('wb'而不是'w')打开文件:

应用程序/控制器/courses_controller.rb

...
File.open(Rails.root.join('public', 'upload', uploaded_io.original_filename), 'wb') do |file|
  file.write(uploaded_io.read)
end
...
于 2013-04-12T11:23:27.897 回答