首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Asp.Net酷睿2+谷歌云存储下载内存流

Asp.Net酷睿2+谷歌云存储下载内存流
EN

Stack Overflow用户
提问于 2018-04-25 23:38:58
回答 2查看 1.7K关注 0票数 1

我正在开发一个Asp.Net Core2WebApi,我必须创建一个端点来下载文件。这个文件不是公共的,所以我不能使用google存储对象的MediaLink属性。我在用他们的C# library

在下面的代码中,你会看到_storageClient是这样创建的:_storageClient = StorageClient.Create(cred);。客户端正在工作,只是显示它是哪个类。

代码语言:javascript
运行
复制
[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错误,我甚至不能捕捉到。

我看不到我做错了什么,也许我是如何使用内存流的,但我甚至不能捕捉到错误。

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2018-04-25 23:48:29

你正在倒带流,但是在你写任何东西之前--但是你不会在之后倒带它。我预计这会导致一个空响应,而不是500错误,但我至少会在下载后将stream.Position调用移到:

代码语言:javascript
运行
复制
var obj = _storageClient.GetObject("bucket name here", "file.png");
_storageClient.DownloadObject(obj, stream);
stream.Position = 0;

请注意,您不需要在下载对象元数据之前获取它。您可以只使用:

代码语言:javascript
运行
复制
_storageClient.DownloadObject("bucket name here", "file.png", stream);
stream.Position = 0;
票数 4
EN

Stack Overflow用户

发布于 2019-10-10 20:15:32

解决方案可以如下所示。

代码语言:javascript
运行
复制
[HttpGet("get-file")]
        public ActionResult GetFile()
        {
            var storageClient = ...;
            byte[] buffer;
            using (var memoryStream = new MemoryStream())
            {
                storageClient.DownloadObject("bucket name here"+"/my-file.jpg", memoryStream);
                buffer = memoryStream.ToArray();
            }

            return File(buffer, "image/jpeg", "my-file.jpg");
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50026282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档