0

WPF プロジェクトで Google ドライブ API を使用することにしました。多くのドキュメントとサンプルを検索しました。学習して成功しました。すべてうまく機能します。この機能を挿入/アップロードに使用しました。

 public static Google.Apis.Drive.v2.Data.File InsertFile(DriveService service, String title, String description, String parentId, String mimeType, String filename)
        {
            Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
            body.Title = title;
            body.Description = description;
            body.MimeType = mimeType;
            if (!String.IsNullOrEmpty(parentId))
            {
                body.Parents = new List<ParentReference>() { new ParentReference() { Id = parentId } };
            }
            byte[] byteArray = System.IO.File.ReadAllBytes(filename);
            MemoryStream stream = new MemoryStream(byteArray);
            try
            {
                FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, mimeType);
                request.Upload();
                Google.Apis.Drive.v2.Data.File file = request.ResponseBody;
                return file;
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: " + e.Message);
            }
        }

小さなサイズのファイルをGoogleドライブにアップロードしたいとき、それはうまくいきます。しかし、大きなサイズのファイルをアップロードしようとすると、エラーが発生して失敗します。このエラーが発生しました

System.Net.WebException was caught HResult=-2146233079 Message=The request was aborted: The request was canceled.Source=System StackTrace:
   at System.Net.ConnectStream.InternalWrite(Boolean async, Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state)
   at System.Net.ConnectStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at Google.Apis.Upload.ResumableUpload`1.SendChunk(Stream stream, Uri uri, Int64 position)
   at Google.Apis.Upload.ResumableUpload`1.Upload()
   at Google.Apis.Util.Utilities.InsertFile(DriveService service, String title, String description, String parentId, String mimeType, String filename) in ..

このエラーを探して同じ問題に遭遇しましたが、どこが間違っているのか理解できません。誰かが私を助けたり、コードを明確に修正したりできますか? ありがとう :)

4

2 に答える 2

0

リクエストのチャンク サイズを変更してみてください。

高速インターネット接続を使用しても問題はありませんでした。

しかし、ADSL 接続に移行すると、5MB を超えるファイルでタイムアウトになることがわかりました。

私たちは私たちをに設定しました

request.ChunkSize = 256 * 1024;

デフォルトでは、Google は 10,485,760 バイト、つまり 10MB を使用します。したがって、タイムアウト期間内に 10MB をアップロードできない場合、エラーが発生します。

問題のデバッグを支援するために、ProgressChanged イベントをサブスクライブし、ヒットするたびに出力します。

request.ProgressChanged += request_ProgressChanged;

....

static void request_ProgressChanged(Google.Apis.Upload.IUploadProgress obj)
{
    var output = String.Format("Status: {0} Bytes: {1}  Exception: {2}", obj.Status, obj.BytesSent, obj.Exception);
    System.Diagnostics.Debug.WriteLine(output);
}

私の個人的な意見では、10 ~ 20 秒ごとに応答が返ってきます。60 秒以上は長すぎます。

http://www.speedtest.net/のようなものを使用して、アップロード速度を計算し、オーバーヘッドをあまり発生させずに信頼できるチャンク サイズを決定することもできます。

于 2013-06-14T06:01:53.513 に答える