3

我正在尝试在网站上实现进度条。

问题:
ProgressEvent.load始终与ProgressEvent.Total相同,这会阻止进度显示上传的真实状态。在 xhr 请求发送的第一秒,它看起来已经完成,但实际上服务器仍在获取文件的一部分。

JS:
我的 js 代码(进度部分)如下所示:

xhr.upload.onprogress = function (event) {
    var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);
    that._onProgressItem(item, progress);
}; 

属性lengthComputable为真。event.loaded是 4354707,而
event.total4354707。 C# 服务器端:


public async Task<FileResultViewModel> Upload(string type)
{            
   string ServerUploadFoler = "...";

   // Verify that this is an HTML Form file upload request
   if (!Request.Content.IsMimeMultipartContent())
   {
       throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
   }                       

   // Create a stream provider for setting up output streams
   var streamProvider = new MultipartFormDataStreamProvider(ServerUploadFolder);            

   // Read the MIME multipart asynchronously content using the stream provider we just created.
   await Request.Content.ReadAsMultipartAsync(streamProvider);            

   string guid = String.Empty;

   if (serverUploadMoveFolder != ServerUploadFolder)
   {
       foreach (MultipartFileData fileData in streamProvider.FileData)
       {
           guid = Guid.NewGuid().ToString();
           string newFileName = serverUploadMoveFolder + guid + GetExtension(uploadType);
           FileInfo fi = new FileInfo(fileData.LocalFileName);
           fi.MoveTo(newFileName);
       }
   }

   // Create response
   return new FileResultViewModel
   {                
       FileName = guid                
   };
}



上传 4.2MB 文件 1 秒后 Chrome 调试: 在此处输入图像描述


请求完成后在提琴手中: 在此处输入图像描述

我的问题是:

  1. 浏览器如何知道加载的大小?它如何将文件拆分为多个部分并基于哪些参数?
  2. xhr.upload.onprogress 函数事件如何随着进度更新?它是报告他进度的服务器吗?如果是这样,它在代码上的什么位置,因为我没有处理它。
  3. 为什么加载的属性不显示零件的实际尺寸?
4

0 回答 0