Node在上传多文件(JS和CSS, 每个文件不超过100k)到七牛的情况下, 极少数会上传成功, 大多数总是在第21秒的时候返回 " connect ETIMEDOUT "(有时候也会返回 " write ECONNRESET " 和 " read ECONNRESET ")
代码如下:
var fs = require('fs');
var qiniu = require('qiniu');
var accessKey = '********';
var secretKey = '********';
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
var staticPath = 'C:/files/';
var prefix = 'static';
var bucket = 'static';
var config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z1;
var formUploader = new qiniu.form_up.FormUploader(config);
var putExtra = new qiniu.form_up.PutExtra();
putExtra = null;
// 文件上传方法
function uploadFile(localFile) {
// 配置上传到七牛云的完整路径
const key = localFile.replace(staticPath, prefix)
const options = {
scope: bucket + ":" + key,
returnBody: '{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}'
}
const putPolicy = new qiniu.rs.PutPolicy(options)
// 生成上传凭证
const uploadToken = putPolicy.uploadToken(mac)
// 上传文件
formUploader.putFile(uploadToken, key, localFile, putExtra, function (respErr, respBody, respInfo) {
if (respErr) {
throw respErr
}
if (respInfo.statusCode == 200) {
} else {
console.log(respInfo.statusCode);
console.log(respBody);
}
})
}
// 目录上传方法
function uploadDirectory(dirPath) {
fs.readdir(dirPath, function (err, files) {
if (err) throw err
// 遍历目录下的内容
files.forEach(item => {
let path = `${dirPath}/${item}`
fs.stat(path, function (err, stats) {
if (err) {
throw err
}
// 是目录就接着遍历 否则上传
if (stats.isDirectory()) uploadDirectory(path)
else uploadFile(path, item)
})
})
})
}
fs.exists(staticPath, function (exists) {
if (!exists) {
console.log('目录不存在!')
} else {
console.log('开始上传...')
uploadDirectory(staticPath)
}
})
fs读取文件夹下所有文件, 然后循环调用putFile方法上传, 总是在上传到21秒的时候报错:
报错过的文件是没有上传成功的, 请问大佬到底是啥原因导致的, 该怎么去解决呢, 而且为什么程序执行完成之后Node并不会自动退出呢...
这个应该是本地网络的限制
可以调低并发量试试