3

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

下面的代码有两个console.log语句。第一个返回[Error: not implemented],第二个返回[Error: form-data: not implemented]。我是 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);
});
4

2 回答 2

5

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

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
    })
});

不幸的是,我希望这会有所帮助如果你愿意。

于 2015-05-15T18:19:37.593 回答
0

如果你想使用 multipart(另一个 npm)这里有一个教程:http: //qnimate.com/stream-file-uploads-to-storage-server-in-node-js/

于 2018-03-09T00:21:37.783 回答