如何为 mvc3 文件上传编写控制器代码

本文关键字:控制器 代码 mvc3 文件 | 更新日期: 2023-09-27 17:57:01

@model Framely2011.Models.PictureUpload
@{
    ViewBag.Title = "Upload";
}
<h2>Upload</h2>
@using (Html.BeginForm("Upload", "Member", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="myFile" id="myFile" />
    @Html.TextBoxFor(x => x.MetaTagsObj.Meta1)<br />
    @Html.TextBoxFor(x => x.MetaTagsObj.Meta2)<br />
    @Html.TextBoxFor(x => x.MetaTagsObj.Meta3)<br />
    <input type="submit" value="submit" />
}
这是我

到目前为止所拥有的,这是我的模型的样子:

public class PictureUpload
    {
        public HttpPostedFile fileName { get; set; }
        public MetaTags MetaTagsObj { get; set; }
    }

我不确定如何编写用于图片上传的控制器,或者在执行[HttpPost]时如何在控制器上上传文件

如何为 mvc3 文件上传编写控制器代码

这是我过去的做法(asp.net mvc 2)...使用.net 4和 asp.net mvc 3可能有一种更简单的方法

foreach (string upload in Request.Files)
            {
                if (!Request.Files[upload].HasFile()) continue;
                string mimeType = Request.Files[upload].ContentType;
                Stream fileStream = Request.Files[upload].InputStream;
                string fileName = Path.GetFileName(Request.Files[upload].FileName);
                int fileLength = Request.Files[upload].ContentLength;
                byte[] fileData = new byte[fileLength];
                fileStream.Read(fileData, 0, fileLength);
                //do something with the byte array (filedata)
            }

HasFile() 是一个扩展方法,定义如下:

public static class HttpPostedFileBaseExtensions
{
    public static bool HasFile(this HttpPostedFileBase file)
    {
        return (file != null && file.ContentLength > 0);
    }
}
enter code here

只需将模型作为[HttpPost]操作方法中的参数,然后读取 fileName 属性。