2017-08-13 51 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和我在生意。

相關問題