我正在尝试创建一个Node.js HTTP文件流服务器。我想做以下事情:
发件人--HTTP POST-->
Node.js HTTP服务器<--HTTP GET--
接收器
我已经使用了以下代码:
var app = express();
// ...
app.post('/upload', function (req, res) {
// Get the `req` and `res` arguments of the HTTP GET request
var downloadRequest = getDownloadClientRequest();
// parse a file upload
var form = new formidable.IncomingForm();
form.onPart = function (part) {
if (!part.filename) {
// let formidable handle all non-file parts
form.handlePart(part);
return;
}
downloadRequest.res.writeHead(200, {
'Content-Disposition': 'attachment; filename=' + part.filename
});
part.on('data', function(data) {
downloadRequest.res.write(data);
});
part.on('end', function() {
downloadRequest.res.end();
});
};
form.parse(req, function (err, fields, files) {
res.writeHead(200);
res.write('Successfully streamed');
res.end();
});
});
app.get('/download', function (req, res) {
storeDownloadClientRequest(req, res);
});
显然,如果上传客户端比下载客户端快得多,则上传速度非常快,我的Node.js进程会将整个文件保存在内存中,直到下载客户端完成。
如何限制上传者的速度?我想我可以不时地暂停他的流,但我怎么知道下载器的流/缓冲区是否正在填满?
PS:如果有帮助,我用wget --limit-rate=100k
限制了下载客户端。
答案 0 :(得分:2)
part.pipe(downloadRequest)
应自动处理暂停/恢复。