Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在下载文件后从azure blob存储中删除该文件_C#_Asp.net Mvc_Azure_.net Core_Azure Blob Storage - Fatal编程技术网

C# 如何在下载文件后从azure blob存储中删除该文件

C# 如何在下载文件后从azure blob存储中删除该文件,c#,asp.net-mvc,azure,.net-core,azure-blob-storage,C#,Asp.net Mvc,Azure,.net Core,Azure Blob Storage,我正在一个blob存储系统上工作,我的文件存储在这个系统上。 现在,我可以从blob容器中删除/取消删除文件。 我正在尝试将一个文件从控制器下载回浏览器并删除该文件 这是我的下载控制器 public ActionResult DownloadBlob(字符串名称){ CloudBlobContainer容器=GetCloudBlobContainer(); var resultSegment=container.ListBlobsSegmentedAsync(name.Split('/')[0]

我正在一个blob存储系统上工作,我的文件存储在这个系统上。 现在,我可以从blob容器中删除/取消删除文件。 我正在尝试将一个文件从控制器下载回浏览器并删除该文件

这是我的下载控制器

public ActionResult DownloadBlob(字符串名称){
CloudBlobContainer容器=GetCloudBlobContainer();
var resultSegment=container.ListBlobsSegmentedAsync(name.Split('/')[0],true,BlobListingDetails.All,null,null,null,null)。结果;
CloudBlockBlob目标=(CloudBlockBlob)resultSegment.Results.FirstOrDefault(e=>e.Uri.Segments.Last()==name.Split('/')[1]);
//var directory=container.GetDirectoryReference(name.Split('/')[0]);
//var block=directory.GetBlockBlobReference(name.Split('/')[1]);
if(target.ExistsAsync().Result){
}否则{
target.UndeleteAsync().Wait();
}
Stream=target.OpenReadAsync().Result;
字符串contentType=target.Properties.contentType;
;
target.DeleteIfExistsAsync();
返回新的FileStreamResult(流,contentType){
FileDownloadName=“下载的”+name.Split('/')[1]
};
}
因此,如果我有一个已删除的文件,我想取消删除它,下载它,然后再次删除它。(软删除已打开) 是否有办法在返回语句后执行删除操作当前代码中是否存在“未找到blob”错误?如果是, 您可以使用MemoryStream和blob.DownloadToStream(MemoryStream),然后您可以在下载完成后删除blob,无需调用return语句后删除

我安装了blob storage:的nuget包,它支持异步和非异步blob方法。您可以使用此包,也可以根据注释将当前代码更改为async

示例代码在我这边运行良好(测试代码,您可以随意修改以满足您的需要):


您应该将控制器操作更改为
异步
,以便在
上被阻止时不会死锁。结果
。谢谢,这非常适合我的需要。而且,今天我学到了一些新东西。我不知道您必须将MemoryStream位置重置回0。一对二:)
    public IActionResult Contact()
    {
        string account_name = "xx";
        string account_key = "xx";

        CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials(account_name, account_key), true);
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer blobContainer = blobClient.GetContainerReference("test1");
        CloudBlockBlob blob = blobContainer.GetBlockBlobReference("df1.JPG");

        if (!blob.Exists())
        {
            blob.Undelete();
        }

        MemoryStream memoryStream = new MemoryStream();

        blob.DownloadToStream(memoryStream);
        memoryStream.Position = 0;
        string contentType = blob.Properties.ContentType;

       blob.DeleteIfExists();

        return new FileStreamResult(memoryStream, contentType)
        {
            FileDownloadName = blob.Name
        };

    }