【发布时间】:2018-04-25 15:38:58
【问题描述】:
我正在开发一个 Asp.Net Core 2 Web Api,我必须创建一个端点来下载文件。这个文件不是公开的,所以我不能使用谷歌存储对象的MediaLink 属性。我正在使用他们的C# library。
在下面的代码中,您将看到_storageClient 是这样创建的:_storageClient = StorageClient.Create(cred);。客户端正在工作,只是显示它是哪个类。
[HttpGet("DownloadFile/{clientId}/{fileId}")]
public async Task<IActionResult> DownloadFile([FromRoute] long fileId, long clientId)
{
// here there are a bunch of logic and permissions. Not relevant to the quest
var stream = new MemoryStream();
try
{
stream.Position = 0;
var obj = _storageClient.GetObject("bucket name here", "file.png");
_storageClient.DownloadObject(obj, stream);
var response = File(stream, obj.ContentType, "file.png"); // FileStreamResult
return response;
}
catch (Exception ex)
{
throw;
}
}
变量obj 正常。所有属性都按预期填充。 stream 似乎已正确填写。它有长度和所有内容,但它返回我什至无法捕捉到的 500 错误。
我看不到我做错了什么,也许我是如何使用内存流的,但我什至无法捕捉到错误。
感谢您的帮助
【问题讨论】:
标签: c# google-cloud-storage memorystream