我想通过ASP.NET Forms C#项目异步上传单个文件到Azure Blob存储,然后在上传完成后从本地存储中删除该文件。文件将很大,因此我不想让用户等待操作完成。
我的代码似乎有效,但我想知道是否有更好或最佳实践方法来实现这一目标?
public async Task<string> SaveImageToBLOBStorageAndDelFromWebSpace(ImageDetails objImageDetail)
{
var container = _client.GetContainerReference(objImageDetail.BlobContainer);
var blob = container.GetBlockBlobReference(objImageDetail.FileName);
await blob.UploadFromFileAsync(HttpContext.Current.Server.MapPath(objImageDetail.FullPathIncFileName)).ConfigureAwait(false);
try
{
File.Delete(System.Web.Hosting.HostingEnvironment.MapPath(objImageDetail.FullPathIncFileName));
}
catch (Exception e)
{
throw;
}
return objImageDetail.FileName;
}
答案 0 :(得分:0)
如BlobRequestOptions.ParallelOperationThread所述:
获取或设置可以同时上传的块数。
<强>说明强>:
在blob上使用UploadFrom *方法时,blob将被分解为块。设置此值可以限制未完成的I / O&#34;放置块&#34;要求图书馆在特定时间内进行飞行。默认值为1(无并行性)。将此值设置得更高可能会导致更快的Blob上载,具体取决于客户端与Azure存储服务之间的网络。如果blob很小(小于256 MB),建议将此值保持为1。
我认为您可以明确设置server.ShutDown()
以便更快地上传blob:
ParallelOperationThreadCound
此外,您可以使用var requestOption = new BlobRequestOptions()
{
ParallelOperationThreadCount = 5 //Gets or sets the number of blocks that may be simultaneously uploaded.
};
//upload a blob from the local file system
await blockBlob.UploadFromFileAsync("{your-file-path}",null,requestOption,null);
上传blob并跟踪上传进度。
WindowsAzure.Storage.DataMovement.TransferManager
有关Azure存储数据移动的更多详细信息,请参阅此article。