我正在创建一个节点服务器来使用' express' fs'来上传文件。和' busboy'模块。服务器正在按预期工作,但是当我在完成之前取消上载时,不完整的文件存储在文件系统中。如何删除不完整的文件?
var express = require("express"),
fs = require("fs"),
Busboy = require("busboy");
app = express();
app.listen(7000);
app.get("/", display_form);
app.post("/upload", function(req, res) {
var busboy = new Busboy({
headers: req.headers
});
busboy.on("file", function(fieldname, file, filename, encoding, mime) {
var fstream = fs.createWriteStream("./uploads/" + filename);
file.pipe(fstream);
file.on("data", function(chunk) {
console.log(chunk.length);
});
file.on("end", function() {
console("end");
});
fstream.on("close", function() {
fstream.close();
console("fstream close");
});
fstream.on("error", function() {
console("fstream error ");
});
});
busboy.on("finish", function() {
console.log("uploaded");
res.send("file uploaded");
});
busboy.on("error", function() {
console("error busboy");
});
req.pipe(busboy);
});
答案 0 :(得分:2)
感谢您的帮助,我终于找到了解决此问题的方法。我添加了下面提到的代码片段并且工作正常。
req.on("close", function(err) {
fstream.end();
fs.unlink('./uploads/' + name);
console.log("req aborted by client");
});
答案 1 :(得分:1)
我不认识busboy,但你开了一条小溪,从不关闭它。 为什么不利用流和文件名来完成'和'错误'并采取相应的行动?
示例:
busboy.on('error', function() {
fs.unlink('./uploads/' + filename);
console.log('error busboy');
}