Почему Multer работает некорректно?
Запуская код на локальном сервере посредством OpenServer
, код работает исправно - загружает изображение в папку и отправляет клиенту новое название картинки.
Но этот же код, без каких-либо изменений, после того, как я залил его на сайт (хостинг BeGet
), сервер стал лишь загружать картинку в папку, но ответ клиенту так и не доходит. Спустя время в консоли браузера вылетает ошибка таймаута. В чём может быть проблема?
Вот серверная часть на node.js
:
const express = require('express');
let app = express();
const path = require('path');
const PORT = 3000;
app.listen(PORT, function(err, start){
(!err) ? console.log('Server listen port' + PORT) : console.log('error start')
});
const createPath = (page) => path.resolve(__dirname, `${page}.ejs`);
app.set('view engine', 'ejs');
app.use(express.urlencoded( { extended: false } ))
const multer = require("multer");
const MAX_SIZE = 3000000; // 3MB
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, "./uploads/");
},
filename: function(req, file, cb) {
cb(null, file.fieldname + "-" + Date.now() + ".png");
}
});
const fileFilter = function(req, file, cb) {
if (file.size > MAX_SIZE) {
req.fileValidationError = "File size is too big";
return cb(null, false, new Error("File size is too big"));
}
cb(null, true);
};
const upload = multer({
storage: storage,
fileFilter: fileFilter
});
app.post("/uploadAvatar", upload.single("file"), (req, res) => {
// Файл доступен в req.file
console.log(req.file);
if (req.fileValidationError) {
return res.send(JSON.stringify(req.fileValidationError));
}else{
return res.send(JSON.stringify(req.file.filename));
}
});
Вот клиентская часть:
<body>
<input id="input" type="file" src="" alt="" class="input">
<button type="" class="btn btn-dark" id="myForm" value="Submit">button</button>
<img class="inner"></img>
<script>
document.querySelector('.btn').addEventListener('click',async function(event){
let input = document.querySelector('.input')
const file = input.files[0];
const reader = new FileReader();
reader.addEventListener("load", function() {
document.querySelector('.inner').src = reader.result;
});
const formData = new FormData();
formData.append("file", file);
reader.readAsDataURL(file);
const res = await fetch('/uploadAvatar', {
method: 'POST',
body: formData
})
const data = await res.json()
console.log(data)
})
</script>
</body>
Источник: Stack Overflow на русском