6 public async Task<IActionResult> BigFileUploadAsync()
7 {
8 var contentType = Request.ContentType;
9 if (!MultipartRequestHelper.IsMultipartContentType(contentType))
10 {
11 ModelState.AddModelError("File",
12 $"上传文件类型不对.");
13 return BadRequest(ModelState);
14 }
15 var path = Path.Combine(_webHostEnvironment.ContentRootPath, "uploads");
16
17 var boundary = MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), _defaultFormOptions.MultipartBoundaryLengthLimit);
18
19 var reader = new MultipartReader(boundary, HttpContext.Request.Body);
20
21 var section = await reader.ReadNextSectionAsync();
22
23 while (section != null)
24 {
25 var hasContentDispositionHeader =
26 ContentDispositionHeaderValue.TryParse(
27 section.ContentDisposition, out var contentDisposition);
28
29 if (hasContentDispositionHeader)
30 {
31 if (!MultipartRequestHelper.HasFileContentDisposition(contentDisposition))
32 {
33 ModelState.AddModelError("File",
34 $"The request couldn't be processed (Error 2).");
35
36 return BadRequest(ModelState);
37 }
38 else
39 {
40 var fileName = MultipartRequestHelper.GetFileName(contentDisposition);
41 var loadBufferBytes = 1024;//这个是每一次从Http请求的section中读出文件数据的大小,单位是Byte即字节,这里设置为1024的意思是,每次从Http请求的section数据流中读取出1024字节的数据到服务器内存中,然后写入下面targetFileStream的文件流中,可以根据服务器的内存大小调整这个值。这样就避免了一次加载所有上传文件的数据到服务器内存中,导致服务器崩溃。
42
43 using (var targetFileStream = new FileStream(path + "\" + string.Format("{0}_{1}", DateTime.Now.Ticks, fileName), FileMode.Create, FileAccess.ReadWrite))