首页 > 解决方案 > 将文件上传到谷歌驱动器导致错误请求错误消息

问题描述

我正在尝试使用我的 asp.net MVC 项目将图像文件上传到 Google 驱动器。我正在使用 Google drive v2 api,但无法上传文件。

我已经用 PostMan 对此进行了测试,效果很好

在邮递员工作

在此处输入图像描述

我的代码

using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://www.googleapis.com");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + Token);
                client.DefaultRequestHeaders.Add("Accept", "application/json");

                using (var content = new MultipartFormDataContent())
                {
                    var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filePath));
                    fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("file")
                    {
                        FileName = "index.jpg"
                    };
                    content.Add(fileContent);

                    var requestUri = "/upload/drive/v2/files/" + FileId;
                    var result = client.PutAsync(requestUri, content).Result;
                }
            }

错误:

我的代码返回一个错误的请求错误,我不知道为什么。

在此处输入图像描述

标签: c#google-drive-apihttpclient

解决方案


我强烈建议您使用Google .net 客户端库,我还建议您切换到使用Google Drive v3

假设您同意上述内容

首先,您需要创建一个驱动服务,您对 api 的所有调用都将通过它。

// Create the  Drive service.
var service = new DriveService(new BaseClientService.Initializer()
    {
    HttpClientInitializer = credential
    });

假设您的文件尚不存在于 Google 驱动器上,您将执行 file.create。您需要做的第一件事是为文件创建元数据。

// Upload file Metadata
var fileMetadata = new Google.Apis.Drive.v3.Data.File()
    {
    Name = "Test hello uploaded.txt",
    Parents = new List() {"10krlloIS2i_2u_ewkdv3_1NqcpmWSL1w"}
    };

上传后,您可以上传文件流

string uploadedFileId;
// Create a new file on Google Drive
await using (var fsSource = new FileStream(UploadFileName, FileMode.Open, FileAccess.Read))
      {
      // Create a new file, with metadata and stream.
      var request = service.Files.Create(fileMetadata, fsSource, "text/plain");
      request.Fields = "*";
      var results = await request.UploadAsync(CancellationToken.None);

      if (results.Status == UploadStatus.Failed)
         {
         Console.WriteLine($"Error uploading file: {results.Exception.Message}");
         }

          // the file id of the new file we created
          uploadedFileId = request.ResponseBody?.Id;
      }

如果文件实际上已经存在,您将需要执行文件 .update 而不是 file.create。

我有一篇关于如何使用 C# .net 将文件上传到 Google 驱动器的完整博客文章 如何使用 C# .net将文件上传到 Google 驱动器tutial 的授权方法是您需要使用web-applications-asp 的服务帐户。 net-mvc这个是为了你的授权。

如果宁愿视频教程,我也有关于该主题的视频Google Drive API V3:使用服务帐户创建、更新和上传文件的完整指南

你的代码

如果你想知道你的代码有什么问题,那么你可能想看看 PutAsync 和 PostAsync 之间的差异。

var result = client.PostAsync(requestUri, content).Result;

推荐阅读