gpt4 book ai didi

node.js - 这个 NodeJs multer 文件上传代码有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:17 25 4
gpt4 key购买 nike

我正在尝试学习 Node 的 multer 库,它对于通过 API 调用上传文件很有用,
我有一个基本的 Express 应用程序设置,监听端口 4300,
使用 multer 的 diskStorage 函数来定义我想要存储上传文件的文件系统位置。

并公开了 3 个端点 -
第一个接受单个文件上传,keyname - singleFile
第二个用于接受 key 名称的文件数组,keyname - multipleFiles
第三个用于接受不同键名称的单个/数组文件的数组。

我指的是以下内容-
1.https://www.npmjs.com/package/multer
2.https://medium.com/@bmshamsnahid/nodejs-file-upload-using-multer-3a904516f6d2

var express = require('express')
var cors = require('cors')
var multer = require('multer')
var async = require('async')

var app = express();
app.use(cors());
app.listen(4300, function () {
console.log('listening on port 4300!');
});


var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, '/home/user/Desktop/node/')
},
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({storage: storage});

app.post('/single', upload.single('singleFile'), function (req, res, next) {
console.log(req.file.filename);
res.send({'message': 'File received! k thnkx bye!'});
});

app.post('/multiple', upload.array('multipleFiles', 3), function (req, res, next) {
console.log(req.files);

async.each(req.files, function (temp, callback) {
console.log(temp);
}, function (err) {
if (err) {
console.log('Error ' + err);
} else {
console.log('Success');
}
});

res.send({'message': 'Files received! k thnkx bye!'});
});

var cpUpload = upload.fields([{ name: 'singleFile', maxCount: 1 }, { name: 'multipleFiles', maxCount: 3 }])
app.post('/fields', cpUpload, function (req, res, next) {
console.log(req);
res.send({'message': 'Files received! k thnkx bye!'});
});

以下是使用 Postman 工具进行的 API 调用 -1.单个文件上传API- enter image description here

<强>2。多文件上传API- enter image description here

我在 console.logs 上收到“TypeError: Cannot read property 'filename' of undefined”,可能是因为某些错误。

调试控制台-

/home/user/.nvm/versions/node/v10.11.0/bin/node --inspect-brk=10250 Node-Tutorials/Apps/multer.js 
Debugger listening on ws://127.0.0.1:10250/87170633-e582-4ac5-b099-0d2e6d090a7f
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
listening on port 4300!
TypeError: Cannot read property 'filename' of undefined
at /home/user/office/node-crud-app/Node-Tutorials/Apps/multer.js:23:26
at callbacks (/home/user/office/node-crud-app/node_modules/express/lib/router/index.js:164:37)
at multerMiddleware (/home/user/office/node-crud-app/node_modules/multer/lib/make-middleware.js:18:41)
at callbacks (/home/user/office/node-crud-app/node_modules/express/lib/router/index.js:164:37)
at param (/home/user/office/node-crud-app/node_modules/express/lib/router/index.js:138:11)
at pass (/home/user/office/node-crud-app/node_modules/express/lib/router/index.js:145:5)
at Router._dispatch (/home/user/office/node-crud-app/node_modules/express/lib/router/index.js:173:5)
at Object.router [as handle] (/home/user/office/node-crud-app/node_modules/express/lib/router/index.js:33:10)
at next (/home/user/office/node-crud-app/node_modules/connect/lib/proto.js:193:15)
at cors (/home/user/office/node-crud-app/node_modules/cors/lib/index.js:188:7)

有人可以帮助修复我的代码,以下载文件系统上的文件吗?

最佳答案

"TypeError: Cannot read property 'filename' of undefined" on the console.logs for some mistake probably.

如果文件为空,则可能出现这种情况。

error message when not uploading a file

案件处理

'use strict';

var express = require('express')
var cors = require('cors')
var multer = require('multer')
var async = require('async')

var app = express();
app.use(cors());
app.listen(4300, function () {
console.log('listening on port 4300!');
});


var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './uploads')
},
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({storage: storage});

const params = {
'/single': 'file',
'/multiple': 'files'
};

function validate(req, res, next) {
let param = params[req.url];
if (!req[param]) {
return res.send({
errors: {
message: `${param} cant be empty`
}
});
}
next();
}

app.post('/single', upload.single('singleFile'), validate, function (req, res, next) {
console.log(req.file.filename);
res.send({'message': 'File received! k thnkx bye!'});
});

app.post('/multiple', upload.array('multipleFiles', 3), validate, function (req, res, next) {
console.log(req.files);

async.each(req.files, function (temp, callback) {
console.log(temp);
}, function (err) {
if (err) {
console.log('Error ' + err);
} else {
console.log('Success');
}
});

res.send({'message': 'Files received! k thnkx bye!'});
});

var cpUpload = upload.fields([{name: 'singleFile', maxCount: 1}, {name: 'multipleFiles', maxCount: 3}])
app.post('/fields', cpUpload, function (req, res, next) {
console.log(req);
res.send({'message': 'Files received! k thnkx bye!'});
});

应该处理空文件上传。

关于node.js - 这个 NodeJs multer 文件上传代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53151106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com