如何删除不完整的上传文件?

时间:2014-09-13 20:46:00

标签: node.js busboy

我正在创建一个节点服务器来使用' 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);
});

2 个答案:

答案 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');
}