使用MVC 3 ajax样式上载文件

时间:2012-05-29 16:09:05

标签: html ajax asp.net-mvc-3 html5

也许只是我,但我正在尝试使用jQuery对话框来捕获用户想要上传的文件。 必须得到IE9的支持。 IE9不支持FormData对象,该对象在我遇到的许多示例和第三方工具中使用。所以为了让我的请求不刷新整个页面,我必须把我的上传到iFrame?真?我知道我可以获得一些flash上​​传器,但我们的网站不支持flash,所以现在就不可能了。

请...请有人告诉我,我做错了,而且有一种更简单的方式,因为我似乎无法找到它...至少不会在IE9上运行。

表格

<form action="/ControllerName/ActionName" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file" />
    <input type="submit" name="submit" value="Submit" />
</form> 

然后进入像这样的iFrame

<iframe src="myUrl"></iframe>

1 个答案:

答案 0 :(得分:0)

查看:

@using (Html.BeginForm("FileUpload","Message",FormMethod.Post,new { enctype="multipart/form-data"})) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Message</legend>

//your html here

                                <input type="file" name="files"/>

    </fieldset>

控制器:

[HttpPost]
        public ActionResult FileUpload(FormCollection values, IEnumerable<HttpPostedFileBase> files)
        {
             //do what you want with form values then for files

           foreach (var file in files)
            {
                if (file.ContentLength > 0)
                {
                    byte[] fileData = new byte[file.ContentLength];
                    file.InputStream.Read(fileData, 0, file.ContentLength);

                   //do what you want with fileData
                }
            }
        }

我提供多个文件上传,所以我使用

IEnumerable<HttpPostedFileBase> files 

如果您只想要一个文件,那么只使用

HttpPostedFileBase file  

并在您的视图中将输入类型更改为

<input type="file" name="file"/>  

这很简单。 此致

编辑:

看一看更好的例子:

http://www.strathweb.com/2012/04/html5-drag-and-drop-asynchronous-multi-file-upload-with-asp-net-webapi/

http://css.dzone.com/articles/implementing-html5-drag-drop

此致