使用处理程序文件在MVC中上载文件

时间:2011-08-03 10:03:35

标签: asp.net-mvc-2

我使用的是一个使用httphandler文件(.ashx)的文件上传器,但是它在普通的.net web appln中运行。现在我试图在MVC中使用相同但不能这样做。任何人都可以帮助我解决这个问题或建议任何其他方式。

1 个答案:

答案 0 :(得分:1)

以下是如何在不使用HttpHandler(* .ashx)的情况下在ASP.NET MVC中上传文件:

假设您要创建新的用户个人资料。每个配置文件都有一个名称和个人资料图片。

1)声明一个模型。使用HttpPostedFileBase类型显示个人资料照片。

public class ProfileModel
{
    public string Name { get; set; }
    public HttpPostedFileBase ProfilePicture { get; set; }
}

2)使用此模型创建一个视图,其中包含可用于创建新配置文件的表单。不要忘记指定enctype =“multipart / form-data”。

<% using (Html.BeginForm("Add", "Profiles", FormMethod.Post, 
          new { enctype = "multipart/form-data" })) { %>
   <%=Html.TextBoxFor(m => m.Name)%>
   <input type="file" id="ProfilePicture" name="ProfilePicture" />    
   <input type="submit" value="Save" />
<% }%>

3)在控制器中声明一个接受发布表单的操作方法。在这里,您可以访问表示上传文件的流。以下代码示例将流读入字节数组(缓冲区)。之后,您可以将文件保存到文件系统,数据库等等。

[HttpPost]
public ActionResult Add(ProfileModel model)
{  
    if (model.ProfilePicture != null && model.ProfilePicture.InputStream != null)
    {
        var filename = model.ProfilePicture.FileName;

        var buffer = new byte[model.ProfilePicture.InputStream.Length];
        model.ProfilePicture.InputStream.Read(buffer, 0, 
            (int) model.ProfilePicture.InputStream.Length);

        //...
     }
}