You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google.Cloud.Storage.V1在.NET中下载超2GB文件的问题

解决Google Cloud Storage下载超过2GB文件的流处理问题

针对你使用Google.Cloud.Storage.V1 2.2.1版本时,MemoryStream无法处理2GB以上文件的问题,提供两种可行方案:

方案一:使用临时文件流(通用所有.NET环境,推荐大文件场景)

通过FileStream创建临时文件存储下载内容,规避内存限制,且能自动清理临时文件:

private async Task<Stream> LoadStream(BlobFileStreamRequest request)
{
    // 创建临时文件,流关闭时自动删除文件
    var tempFilePath = Path.GetTempFileName();
    var fileStream = new FileStream(
        tempFilePath, 
        FileMode.Create, 
        FileAccess.ReadWrite, 
        FileShare.None, 
        bufferSize: 4096, 
        options: FileOptions.Asynchronous | FileOptions.DeleteOnClose
    );

    try
    {
        await LocalRetryPolicy.ExecuteAsync(async () =>
        {
            var bucketName = request.StoreContext.BucketName;
            var fileName = FileName(request.StoreContext.RelativePath, request.FileName);

            await StorageClient.DownloadObjectAsync(bucketName, fileName, fileStream);
            fileStream.Position = 0;
        });

        return fileStream;
    }
    catch
    {
        // 下载失败时提前清理资源
        fileStream.Dispose();
        throw;
    }
}

说明

  • FileOptions.DeleteOnClose确保流关闭时系统自动删除临时文件,避免残留。
  • 异步文件流配置提升下载效率,适用于大文件场景。
  • 调用方使用完流后需正确调用Dispose(),触发临时文件删除。

方案二:.NET Core/.NET 5+环境下使用大内存流

如果运行环境是.NET Core 2.1+或.NET 5+,可以直接启用MemoryStream的大内存支持:

private async Task<Stream> LoadStream(BlobFileStreamRequest request)
{
    // 允许MemoryStream分配超过2GB的内存
    var memStream = new MemoryStream { AllowLargeMemoryStream = true };

    await LocalRetryPolicy.ExecuteAsync(async () =>
    {
        var bucketName = request.StoreContext.BucketName;
        var fileName = FileName(request.StoreContext.RelativePath, request.FileName);

        await StorageClient.DownloadObjectAsync(bucketName, fileName, memStream);
        memStream.Position = 0;
    });

    return memStream;
}

说明

  • .NET Core及更高版本中,MemoryStream默认允许大内存分配,显式设置AllowLargeMemoryStream = true是为了确保行为明确。
  • 该方案会占用大量系统内存,仅推荐内存充足且文件体积可控的场景。

内容的提问来源于stack exchange,提问作者Amit Tikoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:15:34