将上传的文件流式传输到 HTTP 请求
Streaming an uploaded file to an HTTP request
我的目标是接受上传的文件并将其流式传输到 Wistia using the the Wistia Upload API. I need to be able to add fields to the HTTP request, and I don't want the file to touch the disk. I'm using Node, Express, Request, and Busboy。
下面的代码有两个 console.log
语句。第一个 returns [Error: not implemented]
和第二个 returns [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);
});
我不太熟悉 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,而且正如我之前所说,问题只是你使用的是未实现的流,我相信有一种方法可以如果需要,可以使用 busboy 配置此操作。
如果你想使用 multipart(另一个 npm)这里有一个教程:
http://qnimate.com/stream-file-uploads-to-storage-server-in-node-js/
我的目标是接受上传的文件并将其流式传输到 Wistia using the the Wistia Upload API. I need to be able to add fields to the HTTP request, and I don't want the file to touch the disk. I'm using Node, Express, Request, and Busboy。
下面的代码有两个 console.log
语句。第一个 returns [Error: not implemented]
和第二个 returns [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);
});
我不太熟悉 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,而且正如我之前所说,问题只是你使用的是未实现的流,我相信有一种方法可以如果需要,可以使用 busboy 配置此操作。
如果你想使用 multipart(另一个 npm)这里有一个教程: http://qnimate.com/stream-file-uploads-to-storage-server-in-node-js/