Connect-busboy:当管道文件写入 steam 时,文件为空或不正确,具体取决于类型
Connect-busboy: When piping file to write steam, file is empty or incorrect depending on type
我正在使用 connect-busboy 测试一个简单的文件上传。我注意到当我上传 PNG 格式的文件时,文件已上传,但内容不正确 - 我无法打开它。我已经对源文件和目标文件进行了 md5sum,它们是不同的。当我上传一个仅包含 15 个字节的文本文件时,我看到文件正在上传到 ./public/ 目录中,但它是空的。
感兴趣的客户端代码:
<form method="post" enctype="multipart/form-data" action="/api/upload">
<input type="file" name="thumbnail"/>
<input type="submit"/>
</form>
服务器端
//includes omitted for readability
var Busboy = require("connect-busboy");
app.use(Busboy());
//Add entires to places
app.post("/api/upload", function (req, res, next) {
req.pipe(req.busboy);
var filesNames = [];
req.busboy.on('file', function(fieldname, file, filename) {
file.on("data", function(data) {
var fstream = FS.createWriteStream('./public/' + filename,{flags: "a"});
file.pipe(fstream);
filesNames.push(filename);
fstream.on("close", function() {
console.log("Closing fstream");
});
});
});
req.busboy.on("finish", function () {
res.writeHead(200, {'Connection': 'close'});
for (var i = 0; i < filesNames.length; i++)
{
res.write(filesNames[i] + "\n");
}
console.log("busboy done");
res.end("Done..");
});
});
我已经查看了多篇关于 busboy 的帖子,所以我在问这个问题之前做了我的研究。
另请注意:如果我要记录数据,我可以看到按预期进入的字节,但是它们没有被写入文件(至少在 .txt 文件中)。
我做错了什么?
您不应该在每次获取一段文件数据时都创建新的可写流。大概够了
req.busboy.on('file', function(fieldname, file, filename) {
var ws = FS.createWriteStream('./public/' + filename, {flags: "a"});
file.pipe(ws);
filesNames.push(filename);
});
我正在使用 connect-busboy 测试一个简单的文件上传。我注意到当我上传 PNG 格式的文件时,文件已上传,但内容不正确 - 我无法打开它。我已经对源文件和目标文件进行了 md5sum,它们是不同的。当我上传一个仅包含 15 个字节的文本文件时,我看到文件正在上传到 ./public/ 目录中,但它是空的。
感兴趣的客户端代码:
<form method="post" enctype="multipart/form-data" action="/api/upload">
<input type="file" name="thumbnail"/>
<input type="submit"/>
</form>
服务器端
//includes omitted for readability
var Busboy = require("connect-busboy");
app.use(Busboy());
//Add entires to places
app.post("/api/upload", function (req, res, next) {
req.pipe(req.busboy);
var filesNames = [];
req.busboy.on('file', function(fieldname, file, filename) {
file.on("data", function(data) {
var fstream = FS.createWriteStream('./public/' + filename,{flags: "a"});
file.pipe(fstream);
filesNames.push(filename);
fstream.on("close", function() {
console.log("Closing fstream");
});
});
});
req.busboy.on("finish", function () {
res.writeHead(200, {'Connection': 'close'});
for (var i = 0; i < filesNames.length; i++)
{
res.write(filesNames[i] + "\n");
}
console.log("busboy done");
res.end("Done..");
});
});
我已经查看了多篇关于 busboy 的帖子,所以我在问这个问题之前做了我的研究。
另请注意:如果我要记录数据,我可以看到按预期进入的字节,但是它们没有被写入文件(至少在 .txt 文件中)。
我做错了什么?
您不应该在每次获取一段文件数据时都创建新的可写流。大概够了
req.busboy.on('file', function(fieldname, file, filename) {
var ws = FS.createWriteStream('./public/' + filename, {flags: "a"});
file.pipe(ws);
filesNames.push(filename);
});