使用 Google Drive V3 API 和服务帐户身份验证,WebViewLink 为空

Using Google Drive V3 API and service account auth, WebViewLink is null

我正在使用 google 驱动器 v3 api 上传文件,然后在响应中使用 Web 视图 link 在浏览器中预览它。但是网络视图 link 即将变为空。当我使用 v2 时,我可以使用替代 link 来完成。

我没有设置父引用,所以我假设根据文档,该文件存储在我的服务帐户的驱动器文件夹(根目录)中。由于我无法登录到服务帐户,因此我与现有的测试 gmail 帐户共享了该文件,并且它已被共享。

我的问题是如何使用 System.Diagnostics.Process.Start(newFile.WebViewLink);

在浏览器中打开文件

这是我的代码:

{
File fileInGoogleDrive = Utils.uploadToDrive(service, pathOfTheFileToBeUploaded, "root");

            Permission toShare = new Permission();
            toShare.EmailAddress = "xyz@gmail.com";
            toShare.Type = "user";
            toShare.Role = "reader";

            PermissionsResource.CreateRequest createRequest = service.Permissions.Create(toShare, fileInGoogleDrive.Id);
            createRequest.Execute();

            return fileInGoogleDrive.WebViewLink; //THIS IS NULL 
}

这里是上传代码:

public static File uploadToDrive(DriveService _service, string _uploadFile, string _parent = "root")
        {            

            if (!String.IsNullOrEmpty(_uploadFile))
            {     

            File fileMetadata = new File();
            fileMetadata.Name = System.IO.Path.GetFileName(_uploadFile);
            fileMetadata.MimeType = GetMimeType(_uploadFile);                    
            //fileMetadata.Parents = new List<FilesResource>() { new FilesResource() {}};                    

            try
            {
                byte[] byteArray = System.IO.File.ReadAllBytes(_uploadFile);
                System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
                FilesResource.CreateMediaUpload request = _service.Files.Create(fileMetadata, stream, GetMimeType(_uploadFile));
                request.Upload();
                return request.ResponseBody;    

            }
            catch (System.IO.IOException iox)
            {
                // Log
                return null;
            }
            catch (Exception e) // any special google drive exceptions??
            {
                //Log
                return null;
            }
        }
        else
        {
            //Log file does not exist
            return null;
        }
    }

有人可以在这里指导我吗?

只是想 post 上面的 C# 语法。在 google 文档中,它说我们必须获取文件,然后使用字段 属性 进行请求。 "Getting the fields in google drive v3 api for .net"

  File resultFile = null;
  FilesResource.ListRequest listRequest = _service.Files.List();
    /* Specify camelCase format to specify fields. You can also check in debug mode the files properties before requesting which will be null. All properties will be capitalized so make th efirst letter as small(camel case standard)*/

  listRequest.Fields = "files(id, webViewLink, size)";                
  var files = listRequest.Execute().Files;


        if (files != null && files.Count > 0)
        {
                foreach (var file in files)
                {
                      if (file.Id == _fileId)
                      {
                           Console.WriteLine("{0}, {1}, {2}", file.Id, file.WebViewLink, file.Size);
                           resultFile = file;
                      }
                 }
         }