2

Rails 3.2.8 で tag_form を使用して簡単なファイル アップローダーを作成したいと考えています。
しかし、画像ファイルを送信しようとすると、

エラー メッセージ (画像ファイルを送信しようとすると)というエラーが表示されます。

CoursesController#attachment
の NoMethodError "2012-03-02 21.53.55.jpg" の未定義メソッド `original_filename':String

----- BEGIN PS(20121216 19:32) -----
または エラーメッセージ (show.html.erb に ":multipart => true" を追加した場合)

Encoding::
UTF-8 への CoursesController#attachment "\xFF" のUndefinedConversionError

----- おわり 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


config/routes.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 アップロードの未定義のエンコード変換に似ているようです

設定後:multipart => true、ファイルをバイナリモード ( 'ではなく)form_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 に答える