node.js - 将上传的文件流式传输到 HTTP 请求

标签 node.js express node-request busboy wistia

我的目标是接受上传的文件并将其流式传输到 Wistia使用the Wistia Upload API 。我需要能够向 HTTP 请求添加字段,并且我不希望文件接触磁盘。我正在使用Node , Express , Request ,和Busboy .

下面的代码有两个 console.log 语句。第一个返回[错误:未实现],第二个返回[错误:表单数据:未实现]。我是 Node 中流媒体的新手,所以我可能做了一些根本性错误的事情。任何帮助将不胜感激。

app.use("/upload", function(req, res, next) {
    var writeStream = new stream.Writable();
    writeStream.on("error", function(error) {
        console.log(error);
    });
    var busboy = new Busboy({headers: req.headers});
    busboy.on("file", function(fieldname, file, filename, encoding, mimetype) {
        file.on("data", function(data) {
            writeStream.write(data);
        });
        file.on("end", function() {
            request.post({
                url: "https://upload.wistia.com",
                formData: {
                    api_password: "abc123",
                    file: new stream.Readable(writeStream)
                }
            }, function(error, response, body) {
                console.log(error);
            });
        });
    });
    req.pipe(busboy);
});

最佳答案

我不太熟悉 Busboy 模块,但您遇到的错误是由于尝试使用未实现的流而导致的。每当您直接从 stream 模块创建新的可读或可写流时,您必须分别创建 _read_write 方法Stream Implementors (node.js api) 。为了让您可以使用以下示例,我们使用 multer 来处理多部分请求,我想您会发现 multer 比 Busboy 更容易使用。

var app = require('express')();
var fs = require('fs');
var request = require('request');
app.use(multer());

app.post("/upload", function(req, res, next) {
    // create a read stream
    var readable = fs.createReadStream(req.files.myfile.path);
    request.post({
        url: "https://upload.wistia.com",
        formData: {
            api_password: "abc123",
            file: readable
        }    
    }, function(err, res, body) {
        // send something to client
    })
});

我希望这会有所帮助,不幸的是我不熟悉busboy,但这应该与 multer 一起使用,正如我之前所说,问题只是您正在使用未实现的流,我确信有一种方法可以配置它如果您愿意,可以与服务员一起操作。

关于node.js - 将上传的文件流式传输到 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30262290/

相关文章:

javascript - 如何使用 NodeJS Express 将新创建的 cookie 发送到浏览器

node.js - Loopback.io 模型、aclprincipalId、$owner

node.js - 如何处理 node.js 请求中的 URI 错误?

node.js - 使用特定网络接口(interface)执行请求

linux - 从 ssh 连接运行文件无法正常工作。仅通过直接连接才能正确执行文件

javascript - angularjs 和expressjs 路由崩溃(噢,啪!)

node.js - 调用 reddit 的/api/submit 失败

javascript - 如何在 async.eachSeries 回调函数中调用回调函数

node.js - 数据存储区使用 Node 获取最后插入的 id

node.js - 如何在node.js后端和Angular 2前端中使用jwt实现社交登录