如何使用Google Drive API和Javascript删除符合条件的文件列表?

如何使用Google Drive API和Javascript删除符合条件的文件列表?,javascript,google-drive-api,google-oauth,google-apis-explorer,Javascript,Google Drive Api,Google Oauth,Google Apis Explorer,我想用get list(我已经在其中编码)获取一个事物列表,但是接下来,我想要一个delete按钮来删除列表中的所有事物。如何使用Google Drive SDK和Javascript实现这一点 例如,如果我的标准是: q: "starred = "+test+" and viewedByMeTime < '"+n+"" q:“starred=“+test+”和viewedByMeTime

我想用get list(我已经在其中编码)获取一个事物列表,但是接下来,我想要一个delete按钮来删除列表中的所有事物。如何使用Google Drive SDK和Javascript实现这一点

例如,如果我的标准是:

 q: "starred = "+test+" and viewedByMeTime < '"+n+""
q:“starred=“+test+”和viewedByMeTime<'”+n+“
如何删除符合该标准的每个文件

参考资料:

我尝试将搜索文件和删除文件组合在一起,但我的技术非常差,我不确定哪个变量表示找到的所有符合条件的文件,以及如何将该变量设置为fileID:

 function DeleteFiles() {
var x = document.getElementById("ResultShown").value;


var date = new Date();
date.setDate(date.getDate() - 180);
var n = date.toISOString().split('.')[0] ;
  var test = false;

    gapi.client.drive.files.list({

      pageSize: x,
     q: "starred = "+test+" and viewedByMeTime < '"+n+"'",


      fields: "nextPageToken, files(id)",
     }

    ).then(function deleteFile(fileId)) {
  var request = gapi.client.drive.files.delete({
  appendPre('Files:');
      var files = response.result.files;
      if (files && files.length > 0) {
        for (var i = 0; i < files.length; i++) {
          var file = files[i];
'fileId': fileId
  });
     request.execute(function(resp) { })
        }
      } 
    });
  }
函数DeleteFiles(){
var x=document.getElementById(“ResultShown”).value;
变量日期=新日期();
date.setDate(date.getDate()-180);
var n=date.toISOString().split('.')[0];
var检验=假;
gapi.client.drive.files.list({
页面大小:x,
q:“带星号的=“+test+”和由metime查看的“+n+”,
字段:“nextPageToken,文件(id)”,
}
).then(函数deleteFile(fileId)){
var request=gapi.client.drive.files.delete({
appendPre('Files:');
var files=response.result.files;
如果(files&&files.length>0){
对于(var i=0;i
因此,使用Javascript驱动API,您将首先使用支持查询参数
q
list
操作向端点发出
GET
。听起来你已经明白了

您将得到一个响应对象——为了更具体,您需要发布一些代码。您是否在使用VanillaJS
XMLHttpRequest
、jQuery的
$.ajax()
、或者是美味的、本机的异步
fetch()
API?无论哪种方式,您都会得到一个可以解析为JSON的响应

正如您所发现的,驱动器API不支持在一个请求中永久删除多个驱动器资源。此时,您可能正在重新考虑应用程序的体系结构:删除一个很长的列表可能需要许多HTTP请求。这可能会产生巨大的开销,所以您可能希望限制列表的长度,或者做一些其他聪明的事情。如果您决定采用这种方法,我建议使用
fetch
异步使用API

因此,在调用
JSON.parse(responseBody)
(或者
responseBody.JSON()
如果使用
fetch()
)之后,您将从Google API中获得如下内容:

{
 "kind": "drive#fileList",
 "etag": "...",
 "selfLink": "https://www.googleapis.com/drive/v2/files",
 "nextPageToken": "...",
 "nextLink": "...",
 "incompleteSearch": false,
 "items": [
  {
   "kind": "drive#file",
   "id": "SOME FILE ID",
   "etag": "...",
   "selfLink": "...",
   "alternateLink": "...",
   "embedLink": "...",
   "openWithLinks": {
        ...
   },
   {
   "kind": "drive#file",
   "id": "SOME FILE ID",
   "etag": "...",
   "selfLink": "...",
   "alternateLink": "...",
   "embedLink": "...",
   "openWithLinks": {
        ...
   }
]
因此,您需要的是:

  • 一种功能,它:

    • 当您的
      GET
      to files.list完成时调用
    • 循环执行
      responseJSON.items
      ,并使用itemId调用下面的函数
  • 在给定ID的情况下发出
    httpdelete
    的函数

  • 因此,如果没有任何具体的实施细节,针对您的目的的通用解决方案可能会是:

    var apiEndpoint = new URL("https://www.googleapis.com/drive/v2/files"),
        params = {q: "some stuff", otherParams: "lol"}
    
    // assemble GET querystring in a nice way
    Object.keys(params).forEach(function(key) {
       apiEndpoint.searchParams.append(key, params[key]);
    });
    
    // go and fetch! (explicit HTTP header options optional but good practice)
    fetch(apiEndpoint , {
                     method: 'GET',
                     mode: 'cors',
                     redirect: 'follow',
                     headers: new Headers({
                         'Content-Type': 'application/json'
                     })
                 });
                     .then(function (responseBody) {
                         return responseBody.json();
                     })
                     .then(function (responseObj) {
                         for(i=0; i<responseObj.items.length; i++) {
                             asyncDeleteDriveItem(responseObj.items[i].id);
                         }
                     });
    
            });
    
    function asyncDeleteDriveItem() {/* ... */}
    
    var apidendpoint=新URL(“https://www.googleapis.com/drive/v2/files"),
    params={q:“一些东西”,otherParams:“lol”}
    //以一种好的方式组装并获取查询字符串
    Object.keys(参数).forEach(函数(键){
    append(key,params[key]);
    });
    //去拿!(显式HTTP头选项可选,但良好实践)
    获取(API端点{
    方法:“GET”,
    模式:“cors”,
    重定向:“跟随”,
    标题:新标题({
    “内容类型”:“应用程序/json”
    })
    });
    .then(函数(响应体){
    返回responseBody.json();
    })
    .then(功能(响应BJ){
    
    对于(i=0;i.向我们展示您尝试过的代码以及要讨论的具体问题。好的,谢谢@ZigMandel,我不确定从何处开始,所以我尝试将搜索文件和删除文件的代码装配在一起。好的,谢谢@jdbiochem!我将在何处和如何插入它,以及如何启动删除序列?我想要一个启动此序列的按钮,是吗我只是让按钮启动函数asyncDeleteDriveItem?另外,我只是使用vanilla JS.good Response。请注意,以这种方式删除多个文件可能会触发403速率限制异常,因此需要限制。