我希望使用Kendo Uploader在ASP.Net Mvc中上传大文件(600 MB)但是我得到了流量异常:
OutOfMemoryException异常
Web.config:设置了maxRequestLength和maxAllowedContentLength 之前
maxRequestLength =“2097152”maxAllowedContentLength =“2147483647”
答案 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