[英]The \"path\" argument must be of type string or an instance of Buffer or URL. Received undefined from nodejs
I am trying to get a file from reactjs and send as param to Node.js backend for processing in an API.我正在尝试从 reactjs 获取文件并作为参数发送到 Node.js 后端,以便在 API 中进行处理。 But it gives me this error.
但它给了我这个错误。 Here is the code:
这是代码:
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));
}
});
}
}
);
And In the frontend, I send the file like that:在前端,我这样发送文件:
<Input type="file" name="voice" />
This is my error code:这是我的错误代码:
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'
How can i prevent this error?我怎样才能防止这个错误?
You need multer for multipart files and uploads.您需要 multer 进行多部分文件和上传。 In frontend add this
在前端添加这个
<form action="/voice" method="post" enctype="multipart/form-data">
<input type="file" name="voice" />
</form>
and in backend,在后端,
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
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.