ASP.NET MVC 4 Web Api ajax文件上传

8

我正在开发一种使用asp.net mvc 4 web api的服务。在一个表单上,用户必须上传几个文件,然后提交表单到服务器。问题出现在使用ajax上传文件到asp.net mvc web api上。我已经实现了不使用ajax的上传。但是我需要使用ajax来完成它。

以下是实现:

public Task<HttpResponseMessage> PostJob()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
    }

    string path = HttpContext.Current.Server.MapPath(string.Format("~/Resources/Documents"));
    MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(path);
    var request = Request.Content.ReadAsMultipartAsync(provider);

    var task = request.ContinueWith<HttpResponseMessage>(t =>
    {
        if (t.IsFaulted || t.IsCanceled)
        {
            return new HttpResponseMessage(HttpStatusCode.InternalServerError);
        }

        string fileName = provider.BodyPartFileNames.FirstOrDefault().Value;
        string originalName = provider.BodyPartFileNames.FirstOrDefault().Key.TrimStart('"').TrimEnd('"');
        string RandomName = provider.BodyPartFileNames.First().Value + Path.GetExtension(originalName);

        FileInfo file = new FileInfo(fileName);
        file.CopyTo(Path.Combine(path, originalName), true);
        file.Delete();


        return new HttpResponseMessage(HttpStatusCode.Created);

    });

我找到了一篇使用HTML5实现此功能的文章,链接为http://www.strathweb.com/2012/04/html5-drag-and-drop-asynchronous-multi-file-upload-with-asp-net-webapi/。我需要它在IE8中运行。也许你有什么想法吗?
非常感谢您的帮助, Iryna。
2个回答

14

在像IE8这样的旧浏览器中,您无法使用纯JavaScript和AJAX上传文件。原因是您无法访问用户在文件输入中选择的文件内容。由于您无法访问此内容,因此无法将其发送到服务器。

您可以使用一些现有的文件上传插件:

它们将测试浏览器的功能,如果支持HTML5和新的XHR2对象,则可以使用AJAX上传文件。或者,如果浏览器不支持,则插件可以回退到Flash或隐藏的iframes。因此,如果需要支持旧浏览器,则除了使用其他客户端脚本技术(如Flash)或使用伪装AJAX请求并实际发送正常的multipart/form-data请求的隐藏iframe之外,您别无选择。


谢谢您的回复。我尝试使用插件,但它们似乎无法与Web API一起使用,或者我不知道如何使其正常工作。如果您知道问题所在,请分享您的想法。 - Iryna
谢谢你的帮助。使用 Uploadify 插件,它运行得非常好。 - Iryna

0
您可以使用Silverlight拖放控件来处理IE 7、8和9。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接