2017-08-13 50 views
0

我试图使用Google Drive .NET API v3将文件上传到我的云端硬盘。我的代码是低于使用Google Drive .NET API创建文件的空响应

static string[] Scopes = { DriveService.Scope.Drive, 
         DriveService.Scope.DriveAppdata, 
         DriveService.Scope.DriveFile, 
         DriveService.Scope.DriveMetadataReadonly, 
         DriveService.Scope.DriveReadonly, 
         DriveService.Scope.DriveScripts }; 
    static string ApplicationName = "Drive API .NET Quickstart"; 

    public ActionResult Index() 
    { 
     UserCredential credential; 

     using (var stream = 
      new FileStream("C:/Users/admin1/Documents/visual studio 2017/Projects/TryGoogleDrive/TryGoogleDrive/client_secret.json", FileMode.Open, FileAccess.Read)) 
     { 
      string credPath = Environment.GetFolderPath(
       System.Environment.SpecialFolder.Personal); 
      credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json"); 

      credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       Scopes, 
       "user", 
       CancellationToken.None, 
       new FileDataStore(credPath, true)).Result; 
      Debug.WriteLine("Credential file saved to: " + credPath); 
     } 

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

     // Define parameters of request. 
     FilesResource.ListRequest listRequest = service.Files.List(); 
     listRequest.PageSize = 10; 
     listRequest.Fields = "nextPageToken, files(id, name)"; 

     // List files. 
     IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute() 
      .Files; 
     Debug.WriteLine("Files:"); 
     if (files != null && files.Count > 0) 
     { 
      foreach (var file in files) 
      { 
       Debug.WriteLine("{0} ({1})", file.Name, file.Id); 
      } 
     } 
     else 
     { 
      Debug.WriteLine("No files found."); 
     } 

     var fileMetadata = new Google.Apis.Drive.v3.Data.File() 
     { 
      Name = "report.csv", 
      MimeType = "text/csv", 
     }; 
     FilesResource.CreateMediaUpload request; 
     using (var stream = new FileStream("C:/debugging/report.csv", 
           FileMode.Open)) 
     { 
      request = service.Files.Create(
       fileMetadata, stream, "text/csv"); 
      request.Fields = "id"; 
      request.Upload(); 
     } 
     var response = request.ResponseBody; 
     Console.WriteLine("File ID: " + response.Id); 

     return View();   
    } 

我面临的问题是,响应始终为空。我仔细研究了一下,发现请求返回了403 resultCode。我还看了一些关于SO thisthis的其他问题,但都没有任何帮助。

编辑:我忘了提及代码的第一部分工作正常 - 它列出了我的驱动器中的所有文件。只有第二部分不工作(上传文件部分)

回答

0

尝试访问从ASP.NET论坛this post

因为您正在使用.net在Google云端硬盘中上传文件,所以与您在应用中执行的操作相同。

您可以尝试直接调用REST API来实现您的要求:

The quickstart from .net将帮助您从/到驱动器API发出请求。

Upload Files

的驱动器API允许你上传的文件数据时createupdating一个File资源。

可以在以下任一方式发送上传请求:

  • 简单的上传:uploadType=media。快速传输小文件(5 MB或更少)。要执行简单的上传,请参阅Performing a Simple Upload.
  • 分段上传:uploadType=multipart。为了快速传输小文件(5 MB或更少)和描述文件的元数据,全部在 单一请求中。要执行分段上传,请参阅Performing a Multipart Upload
  • 可恢复上传:uploadType=resumable。为了更可靠的传输,对于大文件尤其重要。对于大多数应用程序来说,可恢复的上传文件是 是一个不错的选择,因为它们还可以为每个上传的一个附加HTTP请求付出代价的小文件 。要 执行可恢复的上载,请参阅Performing a Resumable Upload

您可以尝试对上传样本文件从documentation此代码。

var fileMetadata = new File() 
{ 
    Name = "photo.jpg" 
}; 
FilesResource.CreateMediaUpload request; 
using (var stream = new System.IO.FileStream("files/photo.jpg", 
         System.IO.FileMode.Open)) 
{ 
    request = driveService.Files.Create(
     fileMetadata, stream, "image/jpeg"); 
    request.Fields = "id"; 
    request.Upload(); 
} 
var file = request.ResponseBody; 
Console.WriteLine("File ID: " + file.Id); 

您可以检查在这documentation可能遇到的错误。

0

看看request.Upload()返回什么。对我来说,当我有这个问题,它返回:

没有足够的权限错误[消息[没有足够的权限]地址[ - ]

我改变了我的范围从DriveService.Scope.DriveReadonlyDriveService.Scope.Drive和我在生意。

相关问题