zoukankan      html  css  js  c++  java
  • Asp.net MVC 1.0 RTM中实现文件上传

    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

  • 相关阅读:
    POI处理Excel工具类
    Mac打开隐藏文件夹
    markdown语法
    U盘分区合并
    数组
    Java插入到mysql数据库显示问号?
    使用vmware打开别人提供好的vmx没反应怎么办?
    求长方形的外接圆
    读取mysql数据库
    excel对列的常用操作
  • 原文地址:https://www.cnblogs.com/wintersun/p/1433828.html
Copyright © 2011-2022 走看看