2

サンプルコードを使用してファイルをアップロードしようとしています。コンパイル エラーは表示されませんが、406 Not Acceptableエラー メッセージが表示されます。これは何を意味するのでしょうか?

POST リクエスト:

Started POST "/files/upload" for 10.15.24.38 at 2012-06-22 21:18:11 -0400
Processing by FilesController#upload as HTML
  Parameters: {"utf8"=>"â", "authenticity_token"=>"wfpBi3Y8KgmqitXrh4fZ3xfun73mWOfXiTQ+J7bdfWU=", "user_id"=>"231",
"button"=>"", "upload"=>{"datafile"=>"ws_1920x1080.jpg"}}

意見:

<%= form_tag files_upload_path, :remote => true, :method => :post, :multipart => true do %>
#The form has some other values too. I am keeping it short here.  
<p>
<label for="upload_file">Select File</label> :
<%= file_field 'upload', 'datafile' %>
</p>
<% end %>

コントローラ:

 def upload
    #The controller has some other values too, that are not related to file upload. 

    if params[:datafile]
    uploaded_io = params[:upload][:datafile]
    File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
    file.write(uploaded_io.read)
    end
    end

    if params[:user_id] 
    #do some extra stuff
    end 

    respond_to do |format|
    format.js
    end 

 end

エラー:

Completed 406 Not Acceptable in 2736ms (ActiveRecord: 3.2ms)
4

3 に答える 3

0

リモートリクエストを介してファイルをアップロードすることは(直接の方法で)許可されていません。こちらをご覧ください:ファイルを非同期でアップロードするにはどうすればよいですか?

于 2012-06-23T08:58:17.783 に答える
0

回答を提供するのに十分な情報はありませんが、次のように、あなたは明らか:multipart => trueに私たちのform_for電話に欠けています:

<%= form_for @upload, :multipart => true do |f| %>
  Your form code here
<% end %>

また、HTML レンダリングを要求しているため、許容できないエラーが発生しますが、HTML にrespond_to応答する部分がない可能性があります。

于 2012-06-23T01:45:31.957 に答える
0

ある種のプラグインまたはそのようなものが必要であることをajax指定するだけで、ファイルをアップロードすることはできないと思いますremote => true

remotipart、、pluploadまたはuploadify そのようなもの。

したがって、プラグインを使用していない場合は、フォームを指定しても、代わりにremote => true通常の HTML リクエストとして送信されます。 XMLHttpRequest

コントローラーで削除したので

format.html一部はリクエストであると想定していますajaxが、実際にはそうではありません (HTML リクエスト)

becoz Rails が応答する適切な形式を見つけられず、報告している406 Not Acceptable

request.xhr?コントローラーでメソッドを ログに記録してください。

何かのようなもの

logger.info "******************** #{request.xhr?} *********************"

そのリクエストがajax リクエストではないことを示すnilrequest.xhr?を返す場合

于 2012-06-23T09:54:20.587 に答える