41

私は私の見解でこのフォームを持っています:

<!-- Bug (extra 'i') right here-----------v  -->
<!-- was: <form method="post" enctype="mulitipart/form-data" action="/Task/SaveFile"> -->
<form method="post" enctype="multipart/form-data" action="/Task/SaveFile">
<input type="file" id="FileBlob" name="FileBlob"/>
<input type="submit"  value="Save"/>
<input type="button" value="Cancel" onclick="window.location.href='/'" />
</form>

そして、私のコントローラーのこのコード:

public ActionResult SaveFile( FormCollection forms )
{
   bool errors = false;
   //this field is never empty, it contains the selected filename
   if ( string.IsNullOrEmpty( forms["FileBlob"] ) )
   {
       errors = true;
       ModelState.AddModelError( "FileBlob", "Please upload a file" );
   }
   else
   {
      string sFileName = forms["FileBlob"];
      var file = Request.Files["FileBlob"];
      //'file' is always null, and Request.Files.Count is always 0 ???
      if ( file != null )
      {
         byte[] buf = new byte[file.ContentLength];
         file.InputStream.Read( buf, 0, file.ContentLength );
         //do stuff with the bytes
      }
      else
      {
         errors = true;
         ModelState.AddModelError( "FileBlob", "Please upload a file" );
      }
   }
   if ( errors )
   {
      return ShowTheFormAgainResult(); 
   }
   else
   {
      return View();
   }
}

私が見つけたすべてのコードサンプルに基づいて、これはそれを行う方法のようです. 小さいファイルと大きいファイルで試しましたが、結果に違いはありませんでした。フォーム フィールドには、選択したものと一致するファイル名が常に含まれており、Request.Files コレクションは常に空です。

関係ないと思いますが、VS Development Web Server を使っています。私の知る限り、IIS と同じようにファイルのアップロードをサポートしています。

遅くなりつつあり、明らかな何かを見落としている可能性があります。アドバイスをいただければ幸いです。

4

4 に答える 4

52

冒とく的な表現の投稿に関するポリシーがどのようなものかはわかりませんが、ここに問題があります。

enctype="mulitipart/form-data"

そこに余分なiものがあったため、ファイルのアップロードが停止しました。そもそもファイルを送信していないことを確認するために、Fiddler を実行する必要がありました。

それは読むべきです:

enctype="multipart/form-data"
于 2008-11-18T06:38:43.993 に答える
16

将来この投稿に出くわす可能性のある人のために、Scott Hanselmanによるこのテーマに関するすばらしい投稿があります:基本に戻るケーススタディ:テストとモックを含むASP.NETMVCを使用したHTTPファイルアップロードの実装

于 2009-12-10T19:58:54.733 に答える
2
var file = Request.Files[sFileName];

する必要があります...

var file = Request.Files["FileBlob"];

そうは言っても、Request.Files.Count1である必要があります...うーん

于 2008-11-18T05:58:15.027 に答える
0

エラーが見つかってよかったです。

補足として、ファイルのアクセス許可などが正しく設定されていない場合にわかるように、ファイル処理コードの周りに try/catch が必要です。

于 2008-11-18T16:27:48.937 に答える