我正在尝试从发送到我的 SailsJs 服务器的 blob 中获取缓冲区。
发送到服务器的示例如下:
Blob(3355) {size: 3355, type: "video/x-matroska;codecs=avc1,opus"}
一旦进入服务器端,我将执行以下操作:
let body = new Array(0);
let buffer;
let readable = req.file('recordingPart');
readable.on('data', (chunk) => {
body.push(new Buffer(chunk));
});
readable.on('end', () => {
buffer = Buffer.concat(body);
console.log('There will be no more data.', buffer.length, buffer);
});
运行这部分代码时出现错误:
buffer.js:226
throw new errors.TypeError(
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string, buffer, arrayBuffer, array, or array-like object. Received type object
at Function.from (buffer.js:226:9)
at new Buffer (buffer.js:174:17)
...
在这种情况下,错误发生在 body.push(new Buffer(chunk));
上 new Buffer(chunk)
我的第一个方法是类似的:
let body = [];
let buffer;
let readable = req.file('recordingPart');
readable.on('data', (chunk) => {
body.push(chunk);
});
readable.on('end', () => {
buffer = Buffer.concat(body);
console.log('There will be no more data.', buffer.length, buffer);
});
但是我遇到了这个错误:
buffer.js:475
throw kConcatErr;
^
TypeError [ERR_INVALID_ARG_TYPE]: The "list" argument must be one of type array, buffer, or uint8Array
at buffer.js:450:20
在这一个中,错误弹出在 Buffer.concat(body);
我从这个答案中得到了一些指导 Node.js: How to read a stream into a buffer?
谁能帮我从 req.file
中获取 buffer
。
最佳答案
你可以得到uploadedFile
如下。
req.file('recordingPart').upload(function (err, uploadedFiles){
if (err) return res.serverError(err);
// Logic with uploadedFiles goes here
});
您可以从 uploadedFiles[0].fd
获取文件描述符,并使用它来读取/流式传输文件,如下所示。
fs.readFile(uploadedFiles[0].fd, 'utf8', function (err,data) {
// Logic with data goes here
var myBuffer = Buffer.from(data);
});
要像上面那样使用 fs
创建 fs
实例,如下所示。
var fs = require('fs');
关于javascript - 在带有 sails js 的 nodejs 中,缓冲区未被识别为缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52656287/