我正在尝试在网站上实现进度条。
问题:
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.total是4354707。
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 调试:
请求完成后在提琴手中:
我的问题是:
- 浏览器如何知道加载的大小?它如何将文件拆分为多个部分并基于哪些参数?
- xhr.upload.onprogress 函数事件如何随着进度更新?它是报告他进度的服务器吗?如果是这样,它在代码上的什么位置,因为我没有处理它。
- 为什么加载的属性不显示零件的实际尺寸?