将文件异步上载到Azure blob存储,然后删除本地文件

时间:2018-04-13 15:35:36

标签: c# azure blob azure-blob-storage

我想通过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;
}

1 个答案:

答案 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