Я пытаюсь изучить библиотеку Noter, которая полезна для загрузки файлов через вызовы API,
У меня есть базовая экспресс-настройка приложения, прослушивание порта 4300,
Использовал функцию дискаStorage мультера для определения местоположения файловой системы, где я хочу сохранить загруженные файлы.
И выставлены 3 конечные точки -
1-й для принятия загрузки одного файла, имя ключа - singleFile
2-й для принятия массива файлов для имени ключа, имя ключа - множественные файлы
3-й для принятия массива файлов одного / массива для разных имен ключей.
Я имею в виду следующее -
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!'});
});
Ниже приведен вызов API с использованием инструмента Postman -
1. API загрузки одного файла -
2. API загрузки нескольких файлов -
Я получаю сообщение "TypeError: Невозможно прочитать свойство 'filename' of undefined" в console.logs для какой-то ошибки, вероятно.
Консоль отладки-
/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)
Может кто-нибудь помочь исправить мой код, чтобы загрузить файлы в файловую систему?