#file-upload #multer #mern
Вопрос:
Я только что переключил загрузку изображений с помощью Multer с локального на облачное хранилище Google, используя «multer-google-хранилище». Раньше он работал нормально, но теперь отправляет 500 внутренних ошибок сервера без сообщения. Я использую Nodejs и Express, реагирую для интерфейса. FormData отформатирована правильно, так как она отлично работает, если я вернусь в локальное хранилище. Есть идеи, как это исправить? Или отобразить сообщение об ошибке? Я не могу найти много документации по «многомерному хранилищу Google». Спасибо за помощь!
Здесь внутренний почтовый маршрут (я скрыл параметры конфигурации)
const multer = require('multer');
const multerGoogleStorage = require('multer-google-storage');
const upload = multer({
storage: multerGoogleStorage.storageEngine({
autoRetry: true,
bucket: '******',
projectId: '******',
keyFilename: '../server/config/key.json',
filename: (req, file, callback) => {
callback(null, file.originalname);
},
}),
});
//@route POST api/listings
//@description Create listing
//@access Private
router.post(
'/',
upload.any(),
[
isLoggedIn,
[
check('title', 'Title is required').not().isEmpty(),
check('coordinates').not().isEmpty(),
check('address').not().isEmpty(),
check('price', 'Set a price').not().isEmpty(),
check('description', 'Type a description').not().isEmpty(),
check('condition', 'Declare the condition').not().isEmpty(),
check('category', 'Please select a category').not().isEmpty(),
],
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
console.log('validation error');
return res.status(400).json({ errors: errors.array() });
}
try {
const files = req.files;
let images = [];
for (let image of files) {
images.push(image.originalname);
}
const newListing = new Listing({
title: req.body.title,
images: images,
coordinates: JSON.parse(req.body.coordinates),
price: req.body.price,
description: req.body.description,
condition: req.body.condition,
dimensions: req.body.dimensions,
quantity: req.body.quantity,
address: req.body.address,
author: req.user.id,
category: JSON.parse(req.body.category),
});
const author = await User.findById(req.user.id);
await author.listings.push(newListing);
await author.save();
const listing = await newListing.save();
res.json(listing);
} catch (error) {
console.log('error');
console.error(error);
res.json(error);
res.status(500).send('Server Error');
}
}
);
Ответ №1:
Я решил проблему, это была проблема с разрешением. В моем предыдущем ведре облачного хранилища Google контроль доступа был «Равномерным», в то время как он должен был быть «мелкозернистым».