使用谷歌驱动器sdk,无法上传文件:响应变为空

时间:2016-02-08 19:22:00

标签: .net c#-4.0 file-upload google-drive-api

我在下面有一个简单的代码上传到谷歌驱动器,但我每次都得到response = null。我的身份验证工作,我能够列出文件,但不能上传或创建目录。 我需要一些额外的权限吗?我看过一些样品,我正在关注它们,但我的上传仍然无效。

如果有人能纠正我,那将是非常有帮助的。以下是我的上传代码。

public static Google.Apis.Drive.v2.Data.File uploadFile(DriveService service, string uploadFile, string parent = null)
            {
                if (System.IO.File.Exists(uploadFile))
                {                
                    Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
                    body.Title = System.IO.Path.GetFileName(uploadFile);
                    body.Description = "File uploaded by installed app";
                    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.Convert = true;
                        request.Upload();
                        Google.Apis.Drive.v2.Data.File f = request.ResponseBody;
                        Console.WriteLine(f.Id);
                        return f;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("An error occured: " + ex.Message);
                        return null;
                    }
                }
                else
                {
                    Console.WriteLine("File does not exist: " + uploadFile);
                    return null;
                }
            }

需要这方面的指导,如果有人能帮助我,我真的很感激!

2 个答案:

答案 0 :(得分:1)

我能够解决这个问题。我没有传递足够的范围,只是DriveService.Scope.Drive。我从string[] scopes = new string[] { DriveService.Scope.Drive };更改为

string[] scopes = new string[] { DriveService.Scope.Drive,  
                           DriveService.Scope.DriveAppdata,
                           DriveService.Scope.DriveAppsReadonly,      
                           DriveService.Scope.DriveFile,   
                           DriveService.Scope.DriveMetadataReadonly, 
                           DriveService.Scope.DriveReadonly,      
                           DriveService.Scope.DriveScripts }; 

答案 1 :(得分:0)

将文件上传到Google云端硬盘需要您使用Drive REST API。由于您已经拥有身份验证令牌,因此您只需要调用POST URL和其他需要设置的参数。

简单的上传案例将如下所示

POST /upload/drive/v2/files?uploadType=media HTTP/1.1
Host: www.googleapis.com
Content-Type: image/jpeg
Content-Length: number_of_bytes_in_file
Authorization: Bearer your_auth_token

JPEG data

还有其他uploadType可供选择,所以只需选择能让您受益最多的东西。有关上传文件的更多信息,请参见V2 Official Documentation。他们的github repository中也提供了一个示例代码(虽然这是在JS中)。

希望这有帮助!