Asp.net MVC 1.0 RTM中实现文件上传

在我们开始之前,你需要知道一个form以post方式上传文件的方式,你将要增加一个特别的enctype attribute到form标签上,为了这个么,我们需要创建一个像这样的form标签:

  1. <% using (Html.BeginForm("Edit""Person", FormMethod.Post, new { enctype = "multipart/form-data" })) {%>  

然后我们只需要增加一个Type为"file"的input,一个sumbit按钮的表单.你必须确保input上有"name" attribute.我们也能任何一个我们想要的form上:

  1. <table>  
  2.     <tr>  
  3.         <td><input type="file" id="picture" name="picture" /></td>  
  4.     </tr>  
  5.     <tr>  
  6.         <td><input type="submit" value="Upload" /></td>  
  7.     </tr>  
  8. </table>  

现在我们自己的表单了,准备好服务器端的Action.我们这么做:

  1. [AcceptVerbs(HttpVerbs.Post)]   
  2. public ActionResult Edit(HttpPostedFileBase picture)   
  3. {   
  4.     if (picture != null)   
  5.     {   
  6.         picture.SaveAs("C:\wherever\" + picture.FileName);   
  7.     }   
  8. }  

漂亮吧!现在只剩下测试它了.我使用了Moq 3,我们只需要mock出一个文件,并放入方法中:

  1. var personPicture = new Mock<HttpPostedFileBase>();   
  2. personPicture.Setup(i => i.FileName).Returns("person.jpg");   
  3. personPicture.Setup(i => i.InputStream).Returns(new MemoryStream(Encoding.UTF8.GetBytes("")));   
  4.   
  5. var controller = new PersonController();   
  6. controller.Edit(personPicture.Object);   
  7.   
  8. personPicture.Verify(p => p.SaveAs("C:\wherever\person.jpg");  

哇.所有能mock出所有我们有的东西,假装控制器中少许属性,调用方法,然后验证图片上适当的方法是否被调用.就是那么简单!

希望你已知道这些,但如果你不知,希望这篇post能帮到你.

翻译:PetterLiu  http://www.cnblogs.com/wintersun     Source

posted on 2009-04-11 19:33  PetterLiu  阅读(717)  评论(0编辑  收藏  举报