2017-10-01 25 views
0

GoogleドライブAPI V3をC#と統合しました。ファイルのアップロード、ファイルのダウンロード、フォルダの作成、ファイルの検索、ファイルのリストの表示など、複数の操作を実行したいGoogleドライブの公式ドキュメントを使用して、私は次のコードを持っています。GoogleドライブAPI v3を使用したファイルのアップロードまたはフォルダの作成C#

using Google.Apis.Auth.OAuth2; 
using Google.Apis.Drive.v3; 
using Google.Apis.Drive.v3.Data; 
using Google.Apis.Services; 
using Google.Apis.Util.Store; 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

    namespace GoogleDrive 
{ 


class Program 
{ 
    // If modifying these scopes, delete your previously saved credentials 
    // at ~/.credentials/drive-dotnet-quickstart.json 
    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"; 

    static void Main(string[] args) 
    { 
     UserCredential credential; 

     using (var stream = 
      new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
     { 
      string credPath = System.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; 
      Console.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; 
     Console.WriteLine("Files:"); 
     Console.WriteLine("Hello World"); 
     if (files != null && files.Count > 0) 
     { 
      foreach (var filee in files) 
      { 
       Console.WriteLine("{0} ({1})", filee.Name, filee.Id); 
      } 
     } 
     else 
     { 
      Console.WriteLine("No files found."); 
     } 



     //file upload 
     string path = "F:\\muneeb\\phone.jpg"; 
     var fileMetadata = new Google.Apis.Drive.v3.Data.File(); 
     // fileMetadata.Name = path.GetFileName(path); 
     fileMetadata.MimeType = "image/jpeg"; 
     FilesResource.CreateMediaUpload request; 
     using (var stream = new System.IO.FileStream(path, System.IO.FileMode.Open)) 
     { 
      request = service.Files.Create(fileMetadata, stream, "image/jpeg"); 
      request.Fields = "id"; 
      request.Upload(); 
     } 
     var file = request.ResponseBody; 
     Console.WriteLine("FILe ID :" + file.Id);   
     //end 
     Console.Read(); 

    } 
} 

私のドライブにあるファイルの一覧が表示されますが、ファイルをアップロードするとnull参照が返されます。 request.Responsebodyを取得すると、ファイルはNullになります。

答えて

0

問題は、私はチュートリアルを使用していたし、私のアプリケーション名は、私がアプリケーションを作成する「ServUp」ということでした。 チュートリアルを使用して、私はアプリケーション名をコードで更新しませんでした。 チュートリアルのコードはこの後

static string ApplicationName = "Drive API .NET Quickstart"; 

static void Main(string[] args) 
{ 
    UserCredential credential; 

    using (var stream = 
     new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
    { 
     string credPath = System.Environment.GetFolderPath(
      System.Environment.SpecialFolder.Personal); 
     credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json"); 

だった私は、問題を発見し、私の問題を修正し、「ServUp」に「ドライブAPI .NETクイックスタート」からアプリケーション名を更新します。

enter static string ApplicationName = "ServUp"; 

static void Main(string[] args) 
{ 
    UserCredential credential; 

    using (var stream = 
     new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
    { 
     string credPath = System.Environment.GetFolderPath(
      System.Environment.SpecialFolder.Personal); 
     credPath = Path.Combine(credPath, ".credentials/ServUp.json");code here 
0

threadを参照してください。正しいスコープを渡していることを確認してください。

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

また、このsample code in uploading a fileをチェックすることがあります。

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); 
関連する問題