Kendo UI Uploader中的大文件

时间:2014-06-08 11:10:41

标签: asp.net asp.net-mvc web kendo-ui

我希望使用Kendo Uploader在ASP.Net Mvc中上传大文件(600 MB)但是我得到了流量异常:

  

OutOfMemoryException异常

     

Web.config:设置了maxRequestLength和maxAllowedContentLength   之前

     

maxRequestLength =“2097152”maxAllowedContentLength =“2147483647”

1 个答案:

答案 0 :(得分:4)

Saeid是我的同事(非常敏锐的人),经过大量研究后我们解决了这个问题, 所以我们认为与你分享....

首先 我想描述解决方案。 我们想用kendo ui上传小部件上传大型文件,但我们遇到了问题。 当我们上传大文件(600MB或更大)时,应用程序抛出内存异常,因为应用程序加载600MB到ram和.....

溶液 1-如果你想使用kendo ui uploader你必须使用以下html代码

<form method="post" enctype="multipart/form-data" action="api/UploadFile">
    <input name="files" id="files" type="file" />
</form>

$("#files").kendoUpload({
        async: {
            saveUrl: "/api/UploadFile",
            autoUpload: true
        },
        success: onSuccess,
        upload: onUpload
});

1-1:你必须使用enctype =“multipart / form-data”进行异步上传, 1-2:action =“api / UploadFile”我想将文件上传到UploadFile web Api

如果你想使用html输入文件,请在html代码下面

<form method="post" enctype="multipart/form-data" action="api/UploadFile">
        <input name="files" id="files" type="file" />
</form>

2-Api必须低于代码

public class UploadController : ApiController
    {
        public Task<HttpResponseMessage> PostFormData()
        {
            // Check if the request contains multipart/form-data.
            if (Request.Content.IsMimeMultipartContent() == false)
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            string root = HttpContext.Current.Server.MapPath("~/App_Data");
            var provider = new MultipartFormDataStreamProvider(root);

            var task = Request.Content.ReadAsMultipartAsync(provider).
                ContinueWith<HttpResponseMessage>(t =>
                {
                    if (t.IsFaulted || t.IsCanceled)
                    {
                        Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
                    }

                    foreach (MultipartFileData file in provider.FileData)
                    {
                        string directory = Path.GetDirectoryName(file.LocalFileName);
                        string filename = file.Headers.ContentDisposition.FileName.Replace(@"\","").Replace(@"""","");
                        File.Move(file.LocalFileName, Path.Combine(directory, filename));
                    }
                    return Request.CreateResponse(HttpStatusCode.OK);
                });

            return task;
        }
    }

2-1:我们确定app_data文件夹以保存上传的文件

现在您可以上传文件Async但如果选择大文件则会出现内存不足

为了解决这个问题,你应该对mvc说不要在UploadFile Api中缓冲数据。

它有简单的解决方案

请阅读以下文章以解决此问题。 Dealing with large file