如何使用Google Drive API和Javascript删除符合条件的文件列表?
我想用get list(我已经在其中编码)获取一个事物列表,但是接下来,我想要一个delete按钮来删除列表中的所有事物。如何使用Google Drive SDK和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
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
。听起来你已经明白了
您将得到一个响应对象——为了更具体,您需要发布一些代码。您是否在使用VanillaJSXMLHttpRequest
、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": {
...
}
]
因此,您需要的是:
- 当您的
to files.list完成时调用GET
- 循环执行
,并使用itemId调用下面的函数responseJSON.items
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速率限制异常,因此需要限制。