2017-05-23 6 views
0

これはChrome拡張機能で使用しています。
ファイルIDを使用した単純なリクエスト1つのファイルを削除します生のXMLHttpRequestを使用してGoogleドライブにファイルを一括で削除

xhr.open('DELETE', 'https://www.googleapis.com/drive/v2/files/' + ID, true); 

私はGoogleドライブから複数のファイルを削除したい場合は、私はトラフIDの配列をループして同じ要求だけを複数回送信しています。
これらのリクエストのほとんどは成功しますが、7-8以上の場合は、リクエストの一部がerror code 403で失敗します(禁止されていると思います)。
通常、削除するファイルが12個ある場合、2〜3個は失敗します。
は(私が要求を繰り返したときに、それらが削除されます)

Googleドライブはスロットリングからいくつかの保護を持っていて、どのように私は複数のファイルを削除しますか?...
タイマーで遅らせること(例えば100ミリ秒)望ましいことではありません私は数百のファイルを削除する必要があり、そして可能性があるため、それが

REST Drive APIドキュメントのは、これは、サンプルコードで複数のファイルを削除する、唯一のシングル

+0

ステータスコードがエラーの場合は、単にリクエストを再試行できます。 – wOxxOm

+0

@wOxxOmはい、私はそれをしています:) ...しかし、私はそれが正しい方法だとは思わない...彼らは(G-devs)はこのようなことが起こるはずです –

+0

文書では[指数バックオフ](https://developers.google.com/drive/v2/web/handle-errors)や[バッチリクエスト](https://developers.google.com/drive/v2/web/batch)。また、IvánNokonokoのTHX @ API v3の –

答えて

1

については何も言いません処理するために、10〜30秒かかりますREST APIを使用してGoogleドライブからファイルを削除するバッチリクエスト:

var arrayOfFileIds; // array of id's of the files you want to delete 
//notice that currently you can only batch up to 100 requests. 
var authToken; //your OAuth2 token. 
var xhr = new XMLHttpRequest; 
var boundary = "END_OF_PART"; 
var separation = "\n--"+boundary + "\n"; 
var ending = "\n--" + boundary + "--"; 

var requestBody = arrayOfFileIds.reduce((accum,current)=>{ 
      accum += separation + 
      "Content-Type: application/http\n\n" + 
      "DELETE https://www.googleapis.com/drive/v2/files/" + 
      current + 
      "\nAuthorization: Bearer " + authToken; 
      return accum; 
     },"") + ending; 

xhr.onload =()=>{ 
    console.log(xhr.response); 
    //handle the response 
}; 
xhr.open("POST", "https://www.googleapis.com/batch", true); 
xhr.setRequestHeader("Content-Type","multipart/mixed; boundary=" + boundary); 
xhr.send(requestBody); 

オプションで、バッチ反応における個々の応答を識別するために、(上記requestBodyに)すべての要求にcontent-idヘッダを追加することができます。

+0

thanxです。魅力のように動作します。 –

関連する問題