所以我花了一段时间为我的.Net核心MVC应用程序显示一个进度条,而官方文档并不是很有帮助。
当文件到达我的控制器时,我还希望将文件上载到Azure blob存储。用户可以根据自己的喜好上传任意数量的文件。
下面是我上传的代码:
for (int i = 0; i < videoFile.Count; i++)
{
long totalBytes = videoFile[i].Length;
byte[] buffer = new byte[16 * 1024];
using (Stream input = videoFile[i].OpenReadStream())
{
long totalReadBytes = 0;
int readBytes;
while ((readBytes = input.Read(buffer, 0, buffer.Length)) > 0)
{
totalReadBytes += readBytes;
var progress = (int)((float)totalReadBytes / (float)totalBytes * 100.0);
}
}
String videoPath = videoFile[i].FileName;
await sc.UploadBlobAsync(groupContainer, videoPath, videoFile[i]);
}
下面是我的UploadBlobAsync方法:
public async Task<bool> UploadBlobAsync(string blobContainer, string blobName, IFormFile file) {
CloudBlobContainer container = await GetContainerAsync(blobContainer);
CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
CancellationToken cancellationToken = new CancellationToken();
IProgress<StorageProgress> progressHandler = new Progress<StorageProgress>(
progress => Console.WriteLine("Progress: {0} bytes transferred", progress.BytesTransferred)
);
using (var filestream = file.OpenReadStream()) {
await blob.UploadFromStreamAsync(filestream,
default(AccessCondition),
default(BlobRequestOptions),
default(OperationContext),
progressHandler,
cancellationToken);
}
return true;
}
我想知道的是:
Console.Writeline似乎不起作用。
发布于 2018-06-08 06:20:59
从另一个角度来看,你应该尝试使用blob上传进度的检查机制,示例如下:
var speedSummary = blobService.createBlockBlobFromStream('mycontainer', file.name, fileStream, file.size, function(error, result, response) {...}
setTimeout(function() {
if (!finishedOrError) {
var process = speedSummary.getCompletePercent();
displayProcess(process);
refreshProgress();
}
}, 200);
你可以在这里找到更多细节:https://github.com/Azure/azure-storage-node/issues/310
1-您只能使用一个进度条
2-您可以使用最近在github中发布的基于blob上传的进度机制。
发布于 2018-09-15 03:21:37
您已关闭,在调用UploadFromStreamAsync之前,您需要为处理程序提供StorageProgress实例:
long byteLength = 1048576L; // 1MB at time
StorageProgress storageProgress = new StorageProgress(byteLength);
progressHandler.Report(storageProgress);
https://stackoverflow.com/questions/50583687
复制相似问题