3

私の目標は、アップロードされたファイルを受け入れ、Wistia Upload APIを使用してWistiaにストリーミングすることです。HTTP リクエストにフィールドを追加できるようにする必要がありますが、ファイルがディスクにアクセスすることは望ましくありません。NodeExpressRequest、およびBusboyを使用しています。

以下のコードには 2 つのconsole.logステートメントがあります。最初の戻り値[Error: not implemented]と 2 番目の戻り値[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 の方が使いやすいことがわかると思います。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
    })
});

残念ながら私は busboy に精通していませんが、これは multer で動作するはずです。前に述べたように、問題は実装されていないストリームを使用していることだけです。busboy でこの操作を構成する方法があると確信しています。あなたが望むなら。

于 2015-05-15T18:19:37.593 に答える