Воспользуйтесь
этой библиотекой на стороне сервера, это самый простой и действенный вариант.
По итогу будет что-то такое:
const multer = require('multer');
const store = multer.diskStorage({
destination(req, file, cb) {
cb(null, './src/public/images'); // ваша папка для файлов на сервере
},
filename(req, file, cb) {
cb(null, Date.now() + '_' + file.originalname);
},
});
const upload = multer({ storage: store }).single('file'); // загрузка одного файла
const uploadMany = multer({ storage: store }).array('files'); // загрузка массива файлов
router.put('/test', upload, (req, res, next) => {
req.body.file // файл
});
router.put('/test', uploadMany, (req, res, next) => {
req.body.files // массив файлов
});
На клиенте воспользуйтесь form-data:
const formdata = new FormData();
formdata.append("file", fileInput.files[0], "/C:/file-path/file.png"); // если файл один
formdata.append("files", fileInput.files[0], "C:/file-path/file.png"); // если файлов много
formdata.append("files", fileInput.files[0], "C:/file-path/file.png"); // если файлов много
const requestOptions = {
method: 'POST',
body: formdata,
redirect: 'follow'
};
fetch("url/test", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));