2012-12-16 104 views
2

我想在Rails 3.2.8上使用tag_form创建一个简单的文件上传器。
但是,当我尝试提交一个图像文件,我得到一个错误说

错误信息(当我尝试提交一个图像文件)在CoursesController#附件
不确定
通过Ruby on Rails上的form_tag表单上传文件

NoMethodError方法`original_filename”为 “2012-03-02 21.53.55.jpg”:字符串

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

编码:: UndefinedConversionError在CoursesController#附着
“\ XFF” 从ASCII-8BIT到UTF-8

----- 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 


配置/ routes.rb中

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

回答

4

似乎窗体没有发送请求的文件。你需要在form_tag中设置:multipart => true。

+0

首先,谢谢你的帮助!我很感激。 我添加了“:multipart => true”,现在看起来像这样: <%= form_tag(attachment_course_path,:action =>'attachment',:multipart => true)do%> 现在, 。 > CoursesController中的编码:: UndefinedConversionError#附件 >从ASCII-8BIT到UTF-8的“\ xFF” 您知道解决方案吗? – wiz

+0

问题解决。谢谢。 http://stackoverflow.com/questions/13909812/error-ruby-on-rails-encodingundefinedconversionerror-in-coursescontrollerat – wiz

0

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

form_tag设置:multipart => true后,您需要以二进制方式打开文件(的'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 
...