当前位置: 首页 > 知识库问答 >
问题:

无法使用服务帐户在google drive上上载图像

束研
2023-03-14

我正在尝试使用服务号将图像文件上传到谷歌驱动器。
在服务号中,我遵循以下步骤:
1)在开发人员控制台上创建新项目
2)在API中

X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(SERVICE_ACCOUNT_EMAIL)
 {
    Scopes = new[] { DriveService.Scope.DriveReadonly }
 }.FromCertificate(certificate));

// Create the service.
     var service = new DriveService(new BaseClientService.Initializer()
    {
                HttpClientInitializer = credential,
                ApplicationName = "Drive API Sample",
    });
File body = new File();
body.Title = "My Sample Image";
body.Description = "Image";
body.MimeType = "image/jpeg";
byte[] byteArray = System.IO.File.ReadAllBytes("image.jpeg");
System.IO.File.Delete("image.jpeg");

System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "image/jpeg");
request.Upload();
File file = request.ResponseBody;

这里的上载失败,当我尝试调试代码时,我发现“request.ResponseBody”为null。

谁能帮我一下吗?

共有1个答案

贡烨烁
2023-03-14

您的代码与我通常使用的代码没有太大不同。我能马上看到的唯一一件你可能会错过的事就是你的父母。我在文档中看不到任何关于家长是必需的内容,但这可能是必需的。

 /// <summary>
  /// Uploads a file
  /// Documentation: https://developers.google.com/drive/v2/reference/files/insert
  /// </summary>
  /// <param name="_service">a Valid authenticated DriveService</param>
  /// <param name="_uploadFile">path to the file to upload</param>
  /// <param name="_parent">Collection of parent folders which contain this file. 
  ///                       Setting this field will put the file in all of the provided folders. root folder.</param>
  /// <returns>If upload succeeded returns the File resource of the uploaded file 
  ///          If the upload fails returns null</returns>
        public static File uploadFile(DriveService _service, string _uploadFile, string _parent) {

            if (System.IO.File.Exists(_uploadFile))
            {
                File body = new File();
                body.Title = System.IO.Path.GetFileName(_uploadFile);
                body.Description = "File uploaded by Diamto Drive Sample";
                body.MimeType = GetMimeType(_uploadFile);
                body.Parents = new List<ParentReference>() { new ParentReference() { Id = _parent } };

                // File's content.
                byte[] byteArray = System.IO.File.ReadAllBytes(_uploadFile);
                System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
                try
                {
                    FilesResource.InsertMediaUpload request = _service.Files.Insert(body, stream, GetMimeType(_uploadFile));
                    request.Upload();
                    return request.ResponseBody;
                }
                catch (Exception e)
                {
                    Console.WriteLine("An error occurred: " + e.Message);
                    return null;
                }
            }
            else {
                Console.WriteLine("File does not exist: " + _uploadFile);
                return null;
            }           

        }
 private static string GetMimeType(string fileName)
        {
            string mimeType = "application/unknown";
            string ext = System.IO.Path.GetExtension(fileName).ToLower();
            Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
            if (regKey != null && regKey.GetValue("Content Type") != null)
                mimeType = regKey.GetValue("Content Type").ToString();
            return mimeType;
        }

从GitHub上的Google-dotnet-Samples项目中提取的代码

 类似资料:
  • 我正在设计一个python GUI,它的一个功能是截图,上传到Imgur,然后获取URL。尽管我在理解文档时遇到了一些问题(特别是因为它说需要通过API创建一个帐户,而不是如何创建)。有人能解释一下如何创建一个帐户,然后使用它上传一张图片吗? 注意:我正在使用PIL来获取屏幕截图,我希望您将其解释为使用请求库编写的代码,或者可能是curl(因为使用请求将其移动到python并不太困难),我将只在程

  • 我正在构建一个需要读取普通Gmail收件箱(不是域的一部分)的Web服务。 代码: 错误: 我看不出这有什么原因不起作用,但读完这篇文章后,你似乎不能在个人@gmail帐户上使用服务帐户凭据。有谁知道这是真的还是我做错了什么? 感谢您的帮助! 更新 如果我将更改为,我可以查看邮件,但无法修改标签,这是我的要求。

  • 我无法上载firebase存储上的配置文件图像。我正在把烤面包片上的错误打印出来。为什么会出现这种情况?我无法解决这个问题,我审查了我的代码很多次。问题可能是什么?我如何调整我的代码以使其正常工作?提前向大家表示感谢。

  • 我正在尝试上传一个图像。当我从本地主机上进行时,它工作得很好,但当我发布它时,它从服务器上抛出一个错误: 当我使用此代码时: 错误为: System.io.DirectoryNotFoundException:找不到路径“d:\inetpub\vhosts\xx.com\httpdocs\images\sections\developer\clientlogo\demo.png”的一部分。在sys

  • 问题内容: 上述代码的结果是: 开启。服务帐户客户ID已在GSuite中使用适当的范围进行了授权。 该服务帐户可用于普通凭据。它仅不适用于委托凭证。 我在我们的域中尝试了不同的API(作用域)和不同的用户。 我有一个同事尝试从头开始编写示例,他得到了同样的东西。 问题答案: 我认为您的问题是,在调用Calendar API 之前,您没有对凭据进行授权,但是我在自己的实现中使用了一些区别 使用以下导

  • 我有一个G套件域,并用域范围的授权打开一个服务号。服务号在项目中也有所有者身份。我启用gmail应用编程接口并添加范围参考(https://developers.google.com/admin-sdk/directory/v1/guides/delegation“将域范围的权限委托给您的服务号”)我也启用不太安全的应用程序设置。 这是我的代码: 但是当我使用这个令牌尝试列出电子邮件时:GETht