I am building a blog system (full stack), and I am trying to upload images. The backend cannot find the image that I uploaded because req.file returns the value undefined
. Is there any solution to let the files to be successfully uploaded?
My code are below
router.post("/rich_editor_upload",async(req,res)=>{
if (!req.files){
res.send(
{
"errno": 1,
"message":
}
)
return;
}
let files = req.files; ///!!!
let ret_files = [];
for (let file of files){
let file_ext = file.originalname.substring(file.originalname.lastIndexOf(".")+1)
let file_name = genid.NextId()+"."+file_ext
fs.renameSync(
process.cwd()+"/public/upload/temp/"+file.file_name,
process.cwd()+"/public/upload/"+file_name
)
ret_files.push("/upload/"+file_name)
}
res.send(
{
"errno": 0,
"data": {
"url": ret_files[0],
}
}
)
})
module.exports = router
The error is below
$ node app.js
Listening to port:8080
node:fs:1042
handleErrorFromBinding(ctx);
^
Error: ENOENT: no such file or directory, rename 'C:\Users\zhang\Desktop\CS 2023\Blog system\Server/public/upload/temp/undefined' -> 'C
:\Users\zhang\Desktop\CS 2023\Blog system\Server/public/upload/468920300437573.jpg'
at Object.renameSync (node:fs:1042:3)
at C:\Users\zhang\Desktop\CS 2023\Blog system\Server\routers\UploardRouter.js:40:12
at Layer.handle [as handle_request] (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\layer.js:95:
5)
at next (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\layer.js:95:
5)
at C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\index.js:284:15
at Function.process_params (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\index.js:346:12)
at next (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\index.js:280:10)
at Function.handle (C:\Users\zhang\Desktop\CS 2023\Blog system\Server\node_modules\express\lib\router\index.js:175:3) {
errno: -4058,
syscall: 'rename',
code: 'ENOENT',
path: 'C:\\Users\\zhang\\Desktop\\CS 2023\\Blog system\\Server/public/upload/temp/undefined',
dest: 'C:\\Users\\zhang\\Desktop\\CS 2023\\Blog system\\Server/public/upload/468920300437573.jpg'
}
Node.js v18.17.0
I am expecting the files=req.files
can get the files that are uploaded