gpt4 book ai didi

azure - 为什么无法使用发布到 Azure 服务器的 asp.net core 应用程序下载 Azure Blob

转载 作者:行者123 更新时间:2023-12-03 01:03:16 25 4
gpt4 key购买 nike

我正在尝试从 Azure 存储帐户容器下载 Blob。当我在本地运行应用程序时,我得到正确的“下载”文件夹 C:\Users\xxxx\Downloads。当我将应用程序发布到 Azure 并尝试下载文件时,出现错误。我尝试了各种“已知文件夹”,有些返回空字符串,有些返回Azure服务器上的文件夹。我可以很好地上传文件,列出容器中的文件,但在下载文件时遇到困难。

string conn = 
configuration.GetValue<string>"AppSettings:AzureContainerConn");
CloudStorageAccount storageAcct = CloudStorageAccount.Parse(conn);
CloudBlobClient blobClient = storageAcct.CreateCloudBlobClient();
CloudBlobContainer container =
blobClient.GetContainerReference(containerName);

Uri uriObj = new Uri(uri);

string filename = Path.GetFileName(uriObj.LocalPath);

// get block blob reference
CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);

Stream blobStream = await blockBlob.OpenReadAsync();

string _filepath = _knownfolder.Path + "\\projectfiles\\";
Directory.CreateDirectory(_filepath);

_filepath = _filepath + filename;
Stream _file = new MemoryStream();
try
{
_file = File.Open(_filepath, FileMode.Create, FileAccess.Write);

await blobStream.CopyToAsync(_file);
}
finally
{
_file.Dispose();
}

预期的最终结果是文件最终位于用户“下载”文件夹内的文件夹中。

最佳答案

既然您谈论的是发布到 Azure,那么代码可能来自 Web 应用程序,对吧? Web 应用程序的代码在服务器上运行。这意味着代码正在尝试将 blob 下载到运行 Web 应用程序的服务器。

要向用户提供下载链接以使他们能够下载文件,请使用 FileStreamResult其中

Represents an ActionResult that when executed will write a file from a stream to the response.

一个(伪代码)示例:

[HttpGet]
public FileStreamResult GetFile()
{
var stream = new MemoryStream();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
blockBlob.DownloadToStream(stream);
blockBlob.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(stream, new MediaTypeHeaderValue("text/plain"))
{
FileDownloadName = "someFile.txt"
};
}

关于azure - 为什么无法使用发布到 Azure 服务器的 asp.net core 应用程序下载 Azure Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com