\ "path" 参数的类型必须是字符串或缓冲区或 URL 的实例。从 nodejs 接收未定义



我正在尝试从reactjs获取一个文件,并将其作为param发送到Node.js后端,以便在API中进行处理。但它给了我这个错误。这是代码:

const FormData = require("form-data");
const fs = require("fs");
const model = "tr-8";
const formd = new FormData();
const { voice } = req.body;
const file = voice;
const timeout = 360000;
formd.append("model", model);
formd.append("files[]", fs.createReadStream(voice, { autoClose: true }));
const request = formd.submit(
`${Process.env.API}` + model,
function (err, rs) {
if (err) {
console.log("formd.submit error " + voice);
console.log(err);
}
if (rs) {
var resp = Buffer.from([]);
rs.on("error", function (err) {
console.log("formd.submit on error " + voice);
console.log(err);
});
rs.on("close", function () {
console.log("close " + voice);
});
rs.on("data", function (chunk) {
resp = Buffer.concat([resp, chunk]);
});
rs.on("end", function () {
console.log("end " + voice);
const resputf8 = resp.toString("utf8");
const recognitionResult = JSON.parse(resputf8);
const speech = recognitionResult.JsonResult;
if (speech.error) {
console.log("transcript error " + speech.error + " " + voice);
} else {
console.log(JSON.stringify(speech, null, 2));
}
});
}
}
);

在前端,我发送这样的文件:

<Input type="file" name="voice" />

这是我的错误代码:

at ReadStream._construct (node:internal/fs/streams:64:17)
at constructNT (node:internal/streams/destroy:288:25)
at processTicksAndRejections (node:internal/process/task_queues:80:21) {
code: 'ERR_INVALID_ARG_TYPE'

如何防止此错误?

您需要多部分文件和上传的multer。在前端添加此

<form action="/voice" method="post" enctype="multipart/form-data">
<input type="file" name="voice" />
</form>

在后端,

var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })
app.post('/voice', upload.single('voice'), function (req, res, next) {
// req.file is the `voice` file
const  voice  = req.file
// req.body will hold the text fields, if there were any
})

相关内容

最新更新