2

私は周りのいくつかの質問を読みました、そして私はそれらの例を試しました、そしてそれらは私のために働きました、ここにリンクがあります:- リンク 1-リンク2-リンク3

しかし、私が少し違うことを達成しようとしているのは、プレーンテキストを含む.DATファイルを変更/アップロードしようとしていることです。問題なくファイルの内容を読み取ることができますが、常に400 Bad Request(Protocol Error)が発生します。これが私のコードです。

   DocumentsService service = new DocumentsService("Man");
   service.setUserCredentials(UserName, Passwod);

   DocumentsListQuery fileQuery = new DocumentsListQuery();
   fileQuery.Query = User.FileName;
   fileQuery.TitleExact = true;
   DocumentsFeed feed = service.Query(fileQuery);

   //Here I get my file to update
   DocumentEntry entry = (DocumentEntry)feed.Entries[0];

    // Set the media source
  //Here I have tried application/octet-stream also
  entry.MediaSource = new MediaFileSource(DataStream, User.FileName, text/plain");

  // Instantiate the ResumableUploader component.
     ResumableUploader uploader = new ResumableUploader();

  // Set the handlers for the completion and progress events
  uploader.AsyncOperationCompleted += new AsyncOperationCompletedEventHandler(OnDone);
  uploader.AsyncOperationProgress += new syncOperationProgressEventHandler(OnProgress);

 ClientLoginAuthenticator authenticator = new ClientLoginAuthenticator("Man", ServiceNames.Documents,Credentials);
 Uri updateUploadUrl = new Uri(UploadUrl);
 AtomLink aLink = new AtomLink(updateUploadUrl.AbsoluteUri);
 aLink.Rel = ResumableUploader.CreateMediaRelation;
 entry.Links.Add(aLink);

// Start the update process.
uploader.UpdateAsync(authenticator,entry,new object());

ありがとう。

編集:これは私がそれを解決した方法です。正しい方向に私を導いてくれたクラウディオに感謝します


  1. サンプルアプリケーションのダウンロード元:サンプルのダウンロード(.zip)
  2. SampleHelperプロジェクトからプロジェクトに実装します:AuthorizationMgr、INativeAuthorizationFlow、LoopbackServerAuthorizationFlow、WindowTitleNativeAuthorizationFlow
  3. このコードで使用します:

    //Call Authorization method... (omitted)
    
    File body = new File();
    body.Title = title;
    body.Description = description;
    body.MimeType = mimeType;
    byte[] byteArray = System.IO.File.ReadAllBytes(filename);
    MemoryStream stream = new MemoryStream(byteArray);
    
    try {
      FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, mimeType);
      request.Upload();
    
      File file = request.ResponseBody;
    
      // Uncomment the following line to print the File ID.
      // Console.WriteLine("File ID: " + file.Id);
    
      return file;
    } catch (Exception e) {
      Console.WriteLine("An error occurred: " + e.Message);
      return null;
    }
    
4

1 に答える 1

2

サーバーが 400 Bad Request を返すたびに、リクエストの何が無効かを示す説明的なエラー メッセージも含まれます。デバッガーからアクセスできない場合は、Fiddler をインストールして、HTTP 要求と応答をキャプチャする必要があります。

Documents List API ではなく、新しい Drive API の使用を開始することをお勧めします。ファイルを Google ドライブにアップロードする方法を示す 5 分間の C# クイックスタート サンプルを次に示します。

https://developers.google.com/drive/quickstart

于 2012-08-31T22:19:36.037 に答える