使用原始XMLHttpRequest批量删除Google云端硬盘上的文件

时间:2017-05-23 18:38:19

标签: javascript google-chrome-extension google-drive-api

我在Chrome扩展程序中使用它。
带文件ID的简单请求将删除单个文件

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

如果我想从Google云端硬盘中删除多个文件,我会循环使用ID的阵列并发送相同的请求,只需多次。
大多数请求都成功了,但是如果我有超过7-8的请求,则部分请求会失败error code 403(我认为这是禁止的)。 通常,如果我要删除12个文件,则会有两个或三个文件失败 (当我重复请求时,它们会被删除)

Google云端硬盘是否有一些防止限制的保护,如何删除多个文件?...
延迟定时器(例如100毫秒)是不可取的,因为我可以删除数百个文件,处理它需要10-30秒

REST Drive API doc没有说删除多个文件,只有单个

1 个答案:

答案 0 :(得分:1)

这是使用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/drive/v2", true);
xhr.setRequestHeader("Content-Type","multipart/mixed; boundary=" + boundary);
xhr.send(requestBody);

或者,您可以为每个请求添加content-id标头(在上面的requestBody中),以识别批量响应中的各个响应。