我在node.js中有以下代码,使用Express
模块:
app.post('/saveDoc', function(req, res) {
// Code to take params with req.busboy.on('field'...
req.busboy.on('file', function(fieldname, file) {
var correctFlags = "";
var exists = fs.existsSync(returnFilePath(uuid) + "/" + fileFor + "_part");
if (exists){
correctFlags = "r+"
}
else{
correctFlags = "w"
}
var fstream1 = fs.createWriteStream(returnFilePath(uuid) + "/" + fileFor + "_part", {start: parseInt(start), flags: correctFlags});
file.pipe(fstream1);
})
此代码的目的是将相同文件的某些部分写入相同的文件中,使用不同的偏移量(以块的形式写入文件)。
我想确保只有一个文件块会创建文件,并写入偏移量(使用"w"
标志),而其他文件将转到"r+"
标志。
我担心以下情况:
我的服务器针对saveDoc
returnFilePath(uuid) + "/" + fileFor + "_part"
的2个请求
然后该文件仍然不存在,而且这两个文件正在获取' w'标志
如果请求之间存在上下文切换,则会发生这种情况:
第一个请求将执行下一个命令:var exists = fs.existsSync(returnFilePath(uuid) + "/" + fileFor + "_part");
并获取false。
上下文切换完成
第二个会执行命令:var exists = fs.existsSync(returnFilePath(uuid) + "/" + fileFor + "_part");
并且也会失败。
结果是" false"对于这两个请求。
这可能吗?或者在我的代码中我确保所有都以同步方式完成,因此上下文切换是不可能的?
答案 0 :(得分:0)
我强烈怀疑这不是您想要做的正确格式。更加结构化的解决方案,比如将数据存储在数据库中,或者只是更像JSON的结构,似乎更好。
也就是说,你可以使用fs.appendFile
,因为它会处理是否写入或追加。