gpt4 book ai didi

javascript - 列出 OneDrive 目录内容而不递归到子目录

转载 作者:行者123 更新时间:2023-12-02 16:26:32 25 4
gpt4 key购买 nike

由于当时微软正在赠送100GB + 100GB我有一些 GB 的空闲空间,几年来我一直想使用这个空间作为从我的 VPS 下载的文件的媒体存储目录。

215GB

所以我开始阅读 OneDrive REST Docs使用 Node.JS 验证我自己,我成功了。

我能够:

  • 随时登录和访问(使用访问 token 和刷新 token )
  • 上传、编辑、删除文件
  • 创建、编辑、删除目录
  • 列出目录内容

所有这一切都是通过使用 REST API 实现的。

问题是,由于这些 OneDrive REST API 的一些限制,我必须循环遍历目录来检测其内容(进行 N 次调用,具体取决于文件夹的深度),而不是一次请求所需的目录。

我只是想为 OneDrive 开发一个类似于 ls 的命令来完成我的 VPS-OneDrive 同步项目。

这是我到目前为止的代码:

function lsdir(path, originalpath, folder, callback) {
dirs = path.split("/");
if (folder == null) {
originalpath = path;
request("https://apis.live.net/v5.0/me/skydrive?access_token=" + at, function(err, res, body) {
var json = JSON.parse(body);
var upload_location = json.upload_location;

request(upload_location + "?access_token=" + at, function(err, res, body) {
//console.log(body);
json = JSON.parse(body);
var found = false;
if (originalpath == "/") {
callback(json, originalpath);
return;
}
for (i in json.data) {
currentFolder = json.data[i];

if (currentFolder.name == dirs[1]) {
found = currentFolder;
if (dirs.length > 2) {
lsdir(dirs.slice(2, dirs.length).join("/"), originalpath, currentFolder, callback);
} else {
callback(currentFolder, originalpath);
return;
}
break;
}
}
});
});
} else if (dirs.length > 0) {
request(folder.upload_location + "/?access_token=" + at, function(err, res, body) {
json = JSON.parse(body);
var found = false;
if (dirs.length == 1) {
callback(json, originalpath);
} else {
for (i in json.data) {
currentFolder = json.data[i];

if (currentFolder.name == dirs[0]) {
lsdir(dirs.slice(1, dirs.length).join("/"), originalpath, currentFolder, callback);
break;
}
}
}

});
}
}
<小时/>
lsdir("/vpsSync/", null, null, function(folder, originalpath) {
console.log(("Directory contents of " + originalpath).bold);
console.log(folder.data.map(function(arr) {
if (arr.type == "folder") {
return arr.name + "/";
}
return arr.name;
}).join("\n"));
});

有没有办法减少递归(或完全删除它)? Micro$ft 服务器非常慢(每个请求 3-5 秒!)

谢谢大家,祝您使用 215GB OneDrive :)

最佳答案

您可能需要考虑使用我们刚刚发布的 API,它具有同步功能。

http://onedrive.github.io/items/view_changes.htm

如果您从要开始遍历层次结构的点开始同步操作,并且不提供 token ,则它应该返回完整的 View 。对于较大的层次结构,您仍然需要发出多个请求(基于“@changes.hasMorechanges”和“@odata.nextLink”的值),但仍然远少于每个文件夹一个。

关于javascript - 列出 OneDrive 目录内容而不递归到子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com