javascript - Connect-busboy : When piping file to write steam, 文件为空或不正确,具体取决于类型

标签 javascript html node.js express busboy

我正在使用 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);
});

关于javascript - Connect-busboy : When piping file to write steam, 文件为空或不正确,具体取决于类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29025828/

相关文章:

由于数组语法,Javascript 警报可能无法正常工作

node.js - 使用 Windows 的 Node 版本管理器时找不到 Node 可执行文件

javascript - 修复了内容在滚动中的 div

javascript - 在 MongoDB 中通过用户 ID 获取集合

node.js - 在预发布之前安装本地私有(private) NPM 依赖项

javascript - 在链接jquery mobile中传递参数

javascript - 媒体查询导航栏中的 Fa 图标分布

javascript - 如何向 Angular2+ 中动态创建的元素添加属性?

javascript - 从 div 中获取值的脚本,比较它是否是时间值,然后添加它

javascript - 如何简化 JavaScript 中的 SVG 链接?