2017-08-13 10 views
0

Googleドライブ.NET API v3を使用してドライブにファイルをアップロードしようとしています。私のコードは以下ですGoogleドライブ.NET APIを使用してNull応答ファイルを作成しています

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();   
    } 

私が直面している問題は、応答は常にnullです。私はそれをもう少し調べて、要求が403 resultCodeを返したことがわかりました。私はまた、SO thisthisのいくつかの他の質問を見たが、どちらも助けにはならなかった。

編集:コードの最初の部分が正しく機能していることを忘れていました。ドライブ内のすべてのファイルがリストされています。 2番目の部分だけが動作していません(アップロードファイルの部分)

答えて

0

ASP.NETフォーラムからthis postにアクセスしてみてください。

Googleドライブで.netを使用してファイルをアップロードしているため、アプリで何をしたいのと同じ考えです。

あなたはあなたの条件を達成するために、直接、残りのAPIを呼び出すしようがあります

The quickstart from .netは、ドライブのAPIへ/からの要求を作るのに役立ちます。

Upload Files

ドライブのAPIは、ときcreateまたは updatingFileリソースファイルデータをアップロードすることができます。

次のいずれかの方法でアップロード要求を送信することができます

  • シンプルアップロード:uploadType=media。小さなファイル(5 MB以下)をすばやく転送するため。簡単なアップロードを行うには、Performing a Simple Upload.
  • マルチパートのアップロード:uploadType=multipartを参照してください。小さなファイル(5 MB以下)とそのファイルを記述するメタデータをすばやく転送するには、すべて の単一リクエストで行います。マルチパートアップロードを実行するには、Performing a Multipart Uploadを参照してください。
  • 再アップロード可能:uploadType=resumable。より信頼性の高い転送、特に大容量のファイルでは重要です。ほとんどのアプリケーションでは、再アップロード可能なアップロードは です。これは、アップロードあたり1つの追加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.DriveReadonlyからDriveService.Scope.Driveに私の範囲を変更し、私はビジネスにありました。

関連する問題