【发布时间】:2016-08-23 13:21:59
【问题描述】:
我正在尝试在创建后将文件上传到 S3,但是该文件似乎没有通过 fs.createWriteStream 关闭。因此,我不断上传一个 0 字节的文件。
function createManifest(manfile) {
console.log(['a'].toString(), ['a', 'b'].toString());
var arrayLength = files.length;
var lastItem = arrayLength - 1;
console.log( chalk.blue("The last item value is:",lastItem))
console.log( chalk.yellow("The arrayLength value is:",arrayLength))
var logStream = fs.createWriteStream("manny_temp.json", {'flags': 'a'});
// use {'flags': 'a'} to append and {'flags': 'w'} to erase and write a new file
// logStream.on('open', function(fd) {
logStream.write('{'+ "\r\n");
logStream.write("\"entries\": [" + "\r\n");
for (var i = 0; i < arrayLength; i++) {
console.log( chalk.inverse(files[i]))
console.log( chalk.blue("The i value is:",i))
if ( i == lastItem) {
logStream.write("{\"url\":\"s3://mybucket/" +files[i] + "\",\"key\":true}" + "\r\n");
} else {
logStream.write("{\"url\":\"s3://mybucket/" +files[i] + "\",\"key\":true}," + "\r\n");
}
}
logStream.write(' ]' + "\r\n");
logStream.write('}');
// }).on('end', function() {
logStream.end();
//fs.renameSync(logStream.path, manfile.toString());
return callback(filepath);
// logStream.close();
//fs.renameSync(logStream.path, "manny.json");
// });
}
我尝试了多种方法来关闭文件,以便下一个函数可以在创建时上传文件,甚至添加了睡眠,但它似乎总是留下一个挂起的 inode。
使用 fs.write 似乎只写一行而不是写数组/流数据中的所有行。
有人有什么建议吗?
【问题讨论】:
-
请清理您的示例代码,使其一目了然。
标签: javascript node.js file fs