Я пытаюсь отправить изображение из моего реагирующего интерфейса (через телефон Android) на мой сервер node.js/express, где оно должно быть обработано Multer, а затем загружено в Cloudinary (это последнее немного не имеет отношения к вопросу). При использовании почтальона это работает отлично, изображение проходит и загружается, однако при создании моего собственного запроса на публикацию с помощью axios (и я также пытался использовать выборку) это не удается, и Мултер, по-видимому, не распознает наличие файла в запросе.
Вот мой код интерфейса:
const uploadProfileImage = async ()=>{
const formData = new FormData();
//console.log(profileImage);
const image = {
uri: profileImage,
type: mime.getType(profileImage),
name: new Date() + "_pfp",
} as any
formData.append('pfp', {
uri: profileImage,
type: mime.getType(profileImage),
name: new Date() + "_pfp",
});
try {
const res = await client.post('/upload-pfp', formData, {headers:{
Accept: 'application/json',
'Content-Type': 'multipart/form-data',
authorization: 'JWT ...',
}});
console.log(res.data);
} catch (error) {
console.error('Upload failed:', {
message: error.message,
status: error.response?.status,
data: error.response?.data
});
}
}
Обработчик запроса на публикацию работает следующим образом:
router.post('/upload-pfp', isAuth, uploads.single('pfp'), uploadPfp)
Где multer настроен следующим образом (и uploadPfp на данный момент не имеет значения, поскольку он не достигает этой стадии с наличием req.file, что проверено путем добавления еще одной функции промежуточного программного обеспечения)< /p>
const multer = require('multer');
const storage = multer.diskStorage({});
const fileFilter = (req, file, cb)=>{
console.log("first")
if(file.mimetype.startsWith('image')){
cb(null, true);
}else{
cb('Invalid image file', false);
}
}
const uploads = multer({storage, fileFilter})
Я пытался использовать MemoryStorage вместо diskStorage, а также пытался указать места хранения, имена, максимальные размеры и тому подобное, но безрезультатно.
Код авторизации , если это вообще поможет, ниже:
exports.isAuth = async(req, res, next)=>{
if(req.headers && req.headers.authorization){
const token = req.headers.authorization.split(' ')[1];
try {
const decode = jwt.verify(token, process.env.JWT_SECRET);
const user = await User.findById(decode.userId);
if(!user){
return res.json({success: false, message: "Unauthorized access"});
}
req.user = user;
next();
} catch (error) {
if(error.name == 'JsonWebTokenError'){
return res.json({success: false, message: "Unauthorized access"});
}
if(error.name == 'TokenExpiredError'){
return res.json({success: false, message: "Session expired, try signing in"});
}
res.json({success: false, message: "Internal server error"});
}
} else {
res.json({success: false, message: "Unauthorized access"})
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... g-axios-vi
Проблема с отправкой изображения из собственного интерфейса React в серверную часть Node.js с помощью Axios через телефо ⇐ Android
Форум для тех, кто программирует под Android
1728291630
Anonymous
Я пытаюсь отправить изображение из моего реагирующего интерфейса (через телефон Android) на мой сервер node.js/express, где оно должно быть обработано Multer, а затем загружено в Cloudinary (это последнее немного не имеет отношения к вопросу). При использовании почтальона это работает отлично, изображение проходит и загружается, однако при создании моего собственного запроса на публикацию с помощью axios (и я также пытался использовать выборку) это не удается, и Мултер, по-видимому, не распознает наличие файла в запросе.
Вот мой код интерфейса:
const uploadProfileImage = async ()=>{
const formData = new FormData();
//console.log(profileImage);
const image = {
uri: profileImage,
type: mime.getType(profileImage),
name: new Date() + "_pfp",
} as any
formData.append('pfp', {
uri: profileImage,
type: mime.getType(profileImage),
name: new Date() + "_pfp",
});
try {
const res = await client.post('/upload-pfp', formData, {headers:{
Accept: 'application/json',
'Content-Type': 'multipart/form-data',
authorization: 'JWT ...',
}});
console.log(res.data);
} catch (error) {
console.error('Upload failed:', {
message: error.message,
status: error.response?.status,
data: error.response?.data
});
}
}
Обработчик запроса на публикацию работает следующим образом:
router.post('/upload-pfp', isAuth, uploads.single('pfp'), uploadPfp)
Где multer настроен следующим образом (и uploadPfp на данный момент не имеет значения, поскольку он не достигает этой стадии с наличием req.file, что проверено путем добавления еще одной функции промежуточного программного обеспечения)< /p>
const multer = require('multer');
const storage = multer.diskStorage({});
const fileFilter = (req, file, cb)=>{
console.log("first")
if(file.mimetype.startsWith('image')){
cb(null, true);
}else{
cb('Invalid image file', false);
}
}
const uploads = multer({storage, fileFilter})
Я пытался использовать MemoryStorage вместо diskStorage, а также пытался указать места хранения, имена, максимальные размеры и тому подобное, но безрезультатно.
Код авторизации , если это вообще поможет, ниже:
exports.isAuth = async(req, res, next)=>{
if(req.headers && req.headers.authorization){
const token = req.headers.authorization.split(' ')[1];
try {
const decode = jwt.verify(token, process.env.JWT_SECRET);
const user = await User.findById(decode.userId);
if(!user){
return res.json({success: false, message: "Unauthorized access"});
}
req.user = user;
next();
} catch (error) {
if(error.name == 'JsonWebTokenError'){
return res.json({success: false, message: "Unauthorized access"});
}
if(error.name == 'TokenExpiredError'){
return res.json({success: false, message: "Session expired, try signing in"});
}
res.json({success: false, message: "Internal server error"});
}
} else {
res.json({success: false, message: "Unauthorized access"})
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79059431/issue-sending-image-from-react-native-frontend-to-node-js-backend-using-axios-vi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия