0

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

2 回答 2

2

感谢您的帮助,我终于找到了解决这个问题的方法。我在提到的代码片段下添加了它,它工作正常。

req.on("close", function(err) {
        fstream.end();
        fs.unlink('./uploads/' + name);
        console.log("req aborted by client");
    });
于 2014-09-14T15:57:19.193 回答
1

我不认识busboy,但你打开一个流并且永远不会关闭它。你为什么不利用流和文件名来“完成”和“错误”并采取相应的行动?

例子:

busboy.on('error', function() {
    fs.unlink('./uploads/' + filename);
    console.log('error busboy');
}
于 2014-09-13T21:28:17.063 回答