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

C#从Google Cloud下载文件遇NotFound及JsonReaderException错误求助

解决方案

1. 核对对象名称的准确性

  • 查看ListObjects输出的文件名,确认和下载时用的"myfile.csv"完全一致——GCS的对象名区分大小写,要是包含子路径(比如docs/myfile.csv),下载时必须完整写全。
  • 举个例子:如果List显示的是MyFile.csv,你用小写的myfile.csv下载就会触发NotFound错误。

2. 修复代码里的语法错误

你这段下载代码有字符串未闭合的问题:

// 错误写法:少了一个闭合双引号
using (var fileStream = File.Create("C:\\...))

改成正确的写法,同时确保目标路径合法:

using (var fileStream = File.Create("C:\\your-save-path\\myfile.csv"))

这种语法错误可能导致文件流创建失败,间接引发后续的JSON解析异常。

3. 检查依赖版本兼容性

  • 用NuGet安装最新稳定版的Google.Cloud.Storage.V1,它会自动处理Newtonsoft.Json的依赖版本,避免版本冲突。
  • 要是你手动指定了Newtonsoft.Json的版本,试着调整到和Google.Cloud.Storage.V1兼容的版本(比如GCS客户端v3.x一般依赖Newtonsoft.Json 12.x及以上)。

4. 捕获完整异常信息排查问题

修改代码捕获并打印所有异常细节,能帮你更精准定位问题:

try
{
    using (var fileStream = File.Create("C:\\your-save-path\\myfile.csv"))
    {
        storageClient.DownloadObject(bucketName, "myfile.csv", fileStream);
    }
}
catch (Google.GoogleApiException ex)
{
    Console.WriteLine($"API状态码: {ex.HttpStatusCode}");
    Console.WriteLine($"错误信息: {ex.Message}");
    Console.WriteLine($"原始响应内容: {ex.ResponseBody}");
    if (ex.InnerException != null)
    {
        Console.WriteLine($"内部异常: {ex.InnerException}");
    }
}

通过打印ResponseBody,你能看到GCS返回的原始错误内容,确认到底是对象真的不存在,还是客户端解析响应时出了问题。

5. 备选:通过媒体URI直接下载

如果上面的方法都不管用,可以绕开客户端库的解析逻辑,直接用对象的媒体链接下载:

var targetObj = storageClient.GetObject(bucketName, "myfile.csv");
using (var webClient = new WebClient())
{
    var accessToken = credential.UnderlyingCredential.GetAccessTokenForRequestAsync().Result;
    webClient.Headers.Add("Authorization", $"Bearer {accessToken}");
    webClient.DownloadFile(targetObj.MediaLink, "C:\\your-save-path\\myfile.csv");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:53:16