【发布时间】:2021-11-29 22:02:29
【问题描述】:
我想知道读取文件和读取目录函数——fs.readdir(path, callback) 和 fs.readFile(path, options, callback) 有类似的功能,没有回调。这里,我先读取所有文件给定目录,并遍历所有文件并将其内容上传到 S3 存储桶。 请参阅下面的工作代码。
const s3Upload = async (req, res) => {
const directoryName = "MAXIS_GAMING/Daily/"
var data = {}
let files = {}
await readFiles1(directoryName)
}
const readFiles1 = async(dirname) => {
let _files
fs.readdir(dirname, (err, files) => {
// On error, show it and return
if(err) return console.error(err);
// files is an array containing the names of all entries
// in the directory, excluding '.' (the directory itself)
// and '..' (the parent directory).
// Display directory entries
console.log(files.join(' '));
files.forEach(function(filename){
fs.readFile(dirname + filename, 'utf-8', function(err, content){
if(err) {
// onError(err);
throw err
return;
}
console.log('cont..............................',content)
console.log('filename', filename)
//await
uploadFiles(filename, content)
//onFileContent(filename, content);
})
})
})
}
const uploadFiles = async (fileName, fileContent) => {
console.log('in uploadd..........')
const GLOBAL_ACCESS_KEY_ID = 'AKIDAQWZX6B3XUBDIFHLPC5LYFTJF15XPIQ';
const GLOBAL_SECRET_ACCESS_KEY = 'Sv4Fe4h4QgErG5XoZbgeC63oczkdW3bMQfC0jvyR8bPbJ9Y97k+'
const GLOBAL_DEFAULT_REGION = 'ap-southeast-1';
const S3_IMAGE_BUCKET ='max-stg-image/stage/reports'//"max-stg-image";
const S3_IMAGE_PATH = "stage";
AWS.config.update({
accessKeyId: GLOBAL_ACCESS_KEY_ID,
secretAccessKey: GLOBAL_SECRET_ACCESS_KEY,
region: GLOBAL_DEFAULT_REGION,
});
const s3 = new AWS.S3()
const bucket = new AWS.S3()
const params = {
Bucket: S3_IMAGE_BUCKET,
Key: fileName,
Body: fileContent
};
// Uploading files to the bucket
s3.upload(params, function(err, data) {
if (err) {
throw err;
}
console.log(`File uploaded successfully. ${data.Location}`);
});
}
app.get('/home/s3Upload', s3Upload)
【问题讨论】:
-
不确定您真正想要的是什么。有
fs.readdirSync()和fs.readFileSync(),但它们都不应该在服务器中使用(启动代码除外),因为它们会阻塞事件循环并破坏服务器的可伸缩性。还有fs.promises.readdir和fs.promises.readFile仍然是异步的,但它们返回一个承诺而不是使用普通的回调。 -
另外,请不要在 http 服务器路由处理程序中的异步处理程序中写入
if (err) { throw err; }。您需要编写真正的错误处理来发送错误响应,而不是异步抛出不会做任何有用的事情。
标签: node.js amazon-s3 callback fs async.js