我认为这个表格有:
这个代码在我的控制器中:
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.AFAIK它支持与IIS相同的文件上传.
现在已经很晚了,我有可能错过一些明显的东西.我很感激任何建议.
我不知道发布亵渎政策的政策是什么,但问题在于:
enctype="mulitipart/form-data"
额外i
的内容阻止了文件上传.不得不运行Fiddler,看它从来没有发送过该文件.
它应该是:
enctype="multipart/form-data"
对于未来可能偶然发现这篇文章的人来说,这是Scott Hanselman关于这个主题的一篇精彩文章:回归基础案例研究:使用ASP.NET MVC实现HTTP文件上传,包括测试和模拟