Проблема с отправкой изображения из собственного интерфейса React в серверную часть Node.js с помощью Axios через телефоAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема с отправкой изображения из собственного интерфейса React в серверную часть Node.js с помощью Axios через телефо

Сообщение 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"})
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... g-axios-vi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»