0

我想獲取列表(我已經編碼)列表的東西,但接下來,我想要一個刪除按鈕,刪除列表中的所有東西。我如何使用Google Drive SDK和Javascript來做到這一點?如何使用Google Drive API和Javascript刪除符合條件的文件列表?

例如,如果我的標準是:

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

如何刪除滿足該條件的每一個文件?

參考文獻:https://developers.google.com/drive/v2/reference/files/delete https://developers.google.com/drive/v2/web/search-parameters

我試着配件搜索文件和刪除文件一起,但我真的不擅長它,我不知道哪個變量代表所有找到符合條件的,以及如何獲得這些文件要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) { }) 
     } 
     } 
    }); 
    } 
+0

[爲什麼「有人能幫助我嗎?」不是一個實際的問題?(HTTP ://meta.stackoverflow.com/q/284236)。向我們展示您嘗試的代碼和特定的問題。 –

+0

好的,謝謝@ZigMandel,我不確定從哪裏開始,所以我嘗試將搜索文件的代碼和刪除文件放在一起。 – Pig

回答

0

因此,使用JavaScript的硬盤API,你首先會發出一個GETfiles端點,使用list行動支持你的查詢參數q。這聽起來像你已經有了這個想法。

你會得到一個響應對象 - 爲了得到更具體的,你需要發佈一些代碼。您是否使用VanillaJS XMLHttpRequest,jQuery的$.ajax(),或許是美味和本機異步fetch() API?無論哪種方式,你都會得到一個可以解析爲JSON的響應。

正如您發現的那樣,Drive API不支持在一個請求中永久刪除多個Drive資源。此時,您可能正在重新思考應用程序的體系結構:刪除很長的列表可能需要很多HTTP請求。這可能會產生很大的開銷,所以你可能想要限制列表的長度或者做一些其他的事情。如果你決定採用這條路線,我建議使用fetch異步使用API​​。

所以你打電話JSON.parse(responseBody)後(或responseBody.json()如果你使用fetch()),你會得到谷歌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": { 
     ... 
    } 
] 

所以,你需要的是:

  1. 一個功能:

    • 被調用的時候你GET到files.list已完成。
    • 通過responseJSON.items循環,並用itemId調用下面的函數。
  2. 給出ID的HTTP DELETE的功能。

因此,沒有您的實現的任何具體細節,你的目的一個通用的解決方案可能是:

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() {/* ... */} 
+0

好的,謝謝@jdbiochem!我在哪裏以及如何插入它,以及如何啓動刪除序列?我想要一個可以啓動這個序列的按鈕,我只是讓按鈕啓動asyncDeleteDriveItem函數嗎?另外,我只使用香草JS。 – Pig

+0

會驅動api v3如何工作? – Pig

+1

很好的答案。請注意,以這種方式刪除多個文件可能會觸發403 Rate LImit異常,因此您需要進行調節。 – pinoyyid

相關問題