ASP.NET MVC 4网络API AJAX文件上传(ASP.NET MVC 4 Web Api

2019-06-26 14:30发布

我使用asp.net mvc的4个Web API开发某种服务。 在一个形式的用户必须上传一些文件,然后提交表单服务器。 问题是在阿贾克斯文件上传到ASP.NET MVC的Web API。 我已经执行上传没有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这项工作。 也许你有什么想法?

任何帮助表示赞赏,伊莉娜。

Answer 1:

在传统的浏览器,如IE8使用纯JavaScript与AJAX你不能上传文件。 这样做的原因是你没有访问到由在文件中输入用户选择的文件内容。 既然你没有访问到内容,则无法将其发送到服务器。

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

  • Plupload
  • Blueimp
  • Valums阿贾克斯上传
  • Uploadify

他们将测试浏览器的功能以及它是否支持HTML5和新XHR2对象,它允许uuploading文件与AJAX它将使用。 或者,如果浏览器不支持的话,这个插件可以回退到Flash或隐藏的iframe的。 所以,如果你需要支持旧版浏览器,你没有太多的选择,但无论是使用其他一些客户端脚本技术如Flash,或者使用一个隐藏的iframe,其假货AJAX请求和实际发送正常的multipart / form-data的请求。



Answer 2:

你可以使用Silverlight的拖放控制,即7,8和9



文章来源: ASP.NET MVC 4 Web Api ajax file upload