C# 正在尝试从azure blob下载word文档

C# 正在尝试从azure blob下载word文档,c#,.net,azure,blob,azure-blob-storage,C#,.net,Azure,Blob,Azure Blob Storage,我正在尝试下载存储在azure blob容器中的word文档,该容器具有私人访问权限,我需要将下载的文档转换为字节数组,以便能够发送到react应用程序 这是我在下面尝试的代码 [Authorize, HttpGet("{id}/{projectphase?}")] public async Task<ActionResult<DesignProject>> GetDesignProject(string id, string proj

我正在尝试下载存储在azure blob容器中的word文档,该容器具有私人访问权限,我需要将下载的文档转换为字节数组,以便能够发送到react应用程序

这是我在下面尝试的代码

    [Authorize, HttpGet("{id}/{projectphase?}")]
    public async Task<ActionResult<DesignProject>> GetDesignProject(string id, string projectphase = null)
    {
          var blobContainerName = Startup.Configuration["AzureStorage:BlobContainerName"];
          var azureStorageConnectionString = Startup.Configuration["AzureStorage:ConnectionString"];

          BlobContainerClient blobContainerClient = new BlobContainerClient(azureStorageConnectionString, blobContainerName);
          blobContainerClient.CreateIfNotExists();
          .......  // not sure how to proceed further 
          .......
          ......
          return new InlineFileContentResult('here i need to return byte array???', "application/docx") { FileDownloadName = fileName };
    }
[授权,HttpGet(“{id}/{projectphase?}”)]
公共异步任务GetDesignProject(字符串id,字符串projectphase=null)
{
var blobContainerName=Startup.Configuration[“AzureStorage:blobContainerName”];
var azureStorageConnectionString=Startup.Configuration[“AzureStorage:ConnectionString”];
BlobContainerClient BlobContainerClient=新的BlobContainerClient(azureStorageConnectionString,blobContainerName);
blobContainerClient.CreateIfNotExists();
……不确定如何进一步进行
.......
......
返回新的InlineFileContentResult('这里我需要返回字节数组??',“application/docx”){FileDownloadName=fileName};
}
我得到了文件存储的完整路径名,如下所示

https://xxxx.blob.core.windows.net/design-project-files/99999-99/99999-99-BOD-Concept.docx

然后我也得到了文件名
99999-99-BOD-Concept.docx


请任何人指导我如何继续下载下一个文档,我将不胜感激。

您不需要将react应用程序请求发送到服务器的过程,因此您的服务器下载文件,然后将其发送到react应用程序;blob存储中的文件是在web上的,可以从blob存储中下载,因此没有必要麻烦您的服务器成为它的代理

如果您为Blob配置公共访问,那么您只需将该URL放入您的react应用程序-用户单击它,下载字节。快乐的日子。如果您有一个私有容器,您仍然可以为blob生成SAS URL

如果您确实需要react应用程序中的字节,那么只需通过javascript web请求获取它——不过您需要在blob容器上设置CORS策略


如果您真的想将文件下载到/通过服务器下载,您可能需要将其流式传输到连接到react应用程序的响应流,并传递到以下内容:

        BlobClient blob = blobContainerClient.GetBlobClient( BLOB NAME I.E PATH INSIDE CONTAINER);

        //download to a file or stream
        await blob.DownloadToAsync( SOMETHING );

    

请尝试以下类似操作(但未测试代码):

公共异步任务GetDesignProject(字符串id,字符串projectphase=null) { var blobContainerName=Startup.Configuration[“AzureStorage:blobContainerName”]; var azureStorageConnectionString=Startup.Configuration[“AzureStorage:ConnectionString”]; BlobContainerClient BlobContainerClient=新的BlobContainerClient(azureStorageConnectionString,blobContainerName); blobContainerClient.CreateIfNotExists(); var blobClient=新的blobClient(“https://xxxx.blob.core.windows.net/design-project-files/99999-99/99999-99-BOD-Concept.docx"); var blobName=blobClient.Name; blobClient=新blobClient(azureStorageConnectionString、blobContainerName、blobName); 使用(var ms=new MemoryStream()) { 等待blobClient.DownloadToAsync(毫秒); 返回新的InlineFileContentResult(ms.ToArray(),“application/docx”){FileDownloadName=fileName}; } } 基本上,我们要做的是首先使用您拥有的URL创建一个
BlobClient
,这样我们就可以从该URL中提取blob的名称(您也可以进行URL解析)。获得blob的名称后,我们将使用连接字符串、blob容器名称和blob的名称创建一个新的BlobClient实例


然后我们将blob的内容下载为流,并将该流转换为字节数组(这部分我不能100%确定我的代码是否有效),然后返回该字节数组。

对不起,我为blob配置了私有访问,你能告诉我如何下载文件的步骤吗?你可以创建一个短期共享访问签名吗?我也创建了一个,之后我就陷入了困境。。因此,您创建了短期SAS,但无法使用SAS url下载该文件?我添加了一些代码,说明如何将该文件下载到服务器
public async Task<ActionResult<DesignProject>> GetDesignProject(string id, string projectphase = null)
{
      var blobContainerName = Startup.Configuration["AzureStorage:BlobContainerName"];
      var azureStorageConnectionString = Startup.Configuration["AzureStorage:ConnectionString"];

      BlobContainerClient blobContainerClient = new BlobContainerClient(azureStorageConnectionString, blobContainerName);
      blobContainerClient.CreateIfNotExists();
      var blobClient = new BlobClient("https://xxxx.blob.core.windows.net/design-project-files/99999-99/99999-99-BOD-Concept.docx");
      var blobName = blobClient.Name;
      blobClient = new BlobClient(azureStorageConnectionString, blobContainerName, blobName);
      using (var ms = new MemoryStream())
      {
        await blobClient.DownloadToAsync(ms);
        return new InlineFileContentResult(ms.ToArray(), "application/docx") { FileDownloadName = fileName };
      }
}