2

C# でファイルをハンドラーにアップロードしようとしていますが、ファイルがアップロードされていないようです。呼び出しRequest.Files["fileNameHere"]は null を返します

私のhtmlコード:

<form id="importManagerForm" action="../ImportManager.ashx" method="POST">
   <input name="selectedFile" id="selectedFile" type="file" /> 
   <input type="submit" value="submit"/>
</form>

ashx ハンドラーのコードは次のとおりです。

public void ProcessRequest(HttpContext context)
{
  var importFile = context.Request.Files["selectedFile"]; //This part returns null
  var fileName = new Guid().ToString() + ".csv";
  importFile.SaveAs(fileName);
}

何が問題なのですか?

アップデート:

で簡単にデバッグするcontext.Request.Filesと、ファイル数が 0 であることがわかりました。

4

4 に答える 4

3

enctype="multipart/form-data"フォームに属性がないようです。

于 2013-02-19T09:22:07.883 に答える
1

html形式でアップロードするファイルがある場合、または形式でタグを使用している場合は常に、リクエストにバイナリデータが含まれていることをブラウザに通知する必要があります。したがって、これを実現するには、タグにenctype属性を追加する必要があります。

enctype = "multipart/form-data"をフォームに追加する必要があります。

送信前に文字がエンコードされていないことを示します。つまり、サーバーにデータを送信する前に、文字がエンコードされていないことを確認します。

于 2013-02-19T09:31:43.397 に答える
1

asp.netフォームサーバーコントロールの代わりにhtmlフォームコントロールを使用しています。

を設定する必要がありますenctype

<form id="importManagerForm" enctype="multipart/form-data" 
      action="../ImportManager.ashx" method="POST">

そうして初めて、ファイルを受信できるようになります

于 2013-02-19T09:22:49.440 に答える
0

ブラウザが原因である可能性があります。IEを使用している場合、ファイルはにありますRequest.Filesが、ChromeとFFでは、ファイルは次Request.QueryString["qqfile"] ようになります。コードを使用した例を次に示します。

于 2013-02-19T09:26:02.313 に答える