gpt4 book ai didi

javascript - Dropbox JS大量writeFile不写入所有文件

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

我有这段代码,应该运行某个目录的每个子目录中的文件,在我的 Dropbox 中创建相同的目录(具有相同的路径),然后将文件上传到我的 Dropbox 中的该目录。我正在使用node-walk插件。

//This runs for every file
walker.on('file', function(path, stats, next){
//Path to where it should upload to on my Dropbox
var uploadPath = (dbPath + datePath + (path + '/uOcME0OGzMf7G3h39INs' + stats.name).replace('tmp-62u3dPAStPa6upQUa4G4/', '')).split('uOcME0OGzMf7G3h39INs');

//Path to the file that it's scanning
var localPath = path + '/' + stats.name;

//The path without file
client.mkdir(uploadPath[0], function(error){
if (error) { return error; }

fs.readFile(localPath, function(error, data){
if (error){
logToFile('fs.readFile error: ' + error);
console.error(error);
}

client.writeFile(uploadPath.join(''), data, function(error, stat){
if (error) {
logToFile('writeFile error: ' + error);
console.error(error);
}
});
});
});

next();
});

问题是,为了上传文件,我必须多次运行脚本(30 多次)才能上传大部分文件。但即便如此,仍有一些文件无法上传。

这是我收到的错误。有时当我运行脚本时没有错误,但下次运行时就会出现错误。即使没有错误,所有文件也永远不会存在。如果可能的话,我想阻止这种情况的发生。

来自 POST https://api-content.dropbox.com/1/files_put/auto/dropbox/path/for/file/here.css::{"error": "失败的 Dropbox API 错误 503要获取 871742009 的锁,请重新发出请求。"}

我可以采取什么不同的措施,以便一次性上传所有文件?

最佳答案

发生该错误是因为您正在启动大量并行上传。有些之所以成功,是因为它们在服务器上排队并被阻止,但如果您发送多个并发请求,则有些很可能会在等待轮到时超时。

您需要按顺序上传,一次上传一个(或至少一次上传少量),以避免出现此类错误。

编辑:您想要的代码可能是这样的。 (我根本没有测试过。)我取消了对 mkdir 的调用,因为目录是在 Dropbox 中隐式创建的,但重要的变化是对 next( )。 (我假设有关 walker 的工作原理,但我不知道它的行为方式。如果这仍然不起作用,您可能需要在调用 writeFile< 时记录一些内容 查看何时被调用。)

//This runs for every file
walker.on('file', function (path, stats, next) {
//Path to where it should upload to on my Dropbox
var uploadPath = (dbPath + datePath + (path + '/uOcME0OGzMf7G3h39INs' + stats.name).replace('tmp-62u3dPAStPa6upQUa4G4/', ''));

//Path to the file that it's scanning
var localPath = path + '/' + stats.name;

fs.readFile(localPath, function (error, data) {
if (error) {
logToFile('fs.readFile error: ' + error);
console.error(error);
}

client.writeFile(uploadPath, data, function (error, stat) {
if (error) {
logToFile('writeFile error: ' + error);
console.error(error);
}
next();
});
});
});

关于javascript - Dropbox JS大量writeFile不写入所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573530/

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