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。

4

2 回答 2

14

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

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

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

于 2012-07-28T17:49:50.217 回答
0

您可以对 7、8 和 9 使用 silverlight 拖放控件

于 2013-01-30T20:03:26.667 回答