Asp.net MVC 1.0 RTM中实现文件上传
在我们开始之前,你需要知道一个form以post方式上传文件的方式,你将要增加一个特别的enctype attribute到form标签上,为了这个么,我们需要创建一个像这样的form标签:
- <% using (Html.BeginForm("Edit", "Person", FormMethod.Post, new { enctype = "multipart/form-data" })) {%>
然后我们只需要增加一个Type为"file"的input,一个sumbit按钮的表单.你必须确保input上有"name" attribute.我们也能任何一个我们想要的form上:
- <table>
- <tr>
- <td><input type="file" id="picture" name="picture" /></td>
- </tr>
- <tr>
- <td><input type="submit" value="Upload" /></td>
- </tr>
- </table>
现在我们自己的表单了,准备好服务器端的Action.我们这么做:
- [AcceptVerbs(HttpVerbs.Post)]
- public ActionResult Edit(HttpPostedFileBase picture)
- {
- if (picture != null)
- {
- picture.SaveAs("C:\wherever\" + picture.FileName);
- }
- }
漂亮吧!现在只剩下测试它了.我使用了Moq 3,我们只需要mock出一个文件,并放入方法中:
- var personPicture = new Mock<HttpPostedFileBase>();
- personPicture.Setup(i => i.FileName).Returns("person.jpg");
- personPicture.Setup(i => i.InputStream).Returns(new MemoryStream(Encoding.UTF8.GetBytes("")));
- var controller = new PersonController();
- controller.Edit(personPicture.Object);
- personPicture.Verify(p => p.SaveAs("C:\wherever\person.jpg");
哇.所有能mock出所有我们有的东西,假装控制器中少许属性,调用方法,然后验证图片上适当的方法是否被调用.就是那么简单!
希望你已知道这些,但如果你不知,希望这篇post能帮到你.
翻译:PetterLiu http://www.cnblogs.com/wintersun Source