Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用React Native中的multer将映像正确发送到后端(nodejs)_Javascript_Node.js_Typescript_React Native_Multer - Fatal编程技术网

Javascript 如何使用React Native中的multer将映像正确发送到后端(nodejs)

Javascript 如何使用React Native中的multer将映像正确发送到后端(nodejs),javascript,node.js,typescript,react-native,multer,Javascript,Node.js,Typescript,React Native,Multer,我在发送照片时遇到问题,无论是使用Axios还是Fetch,我的Nodejs后端都已配置,整个上传过程在Insonmia的正常测试中正常工作,但在React Native中它无法正常工作 后端-用于更新用户数据的控制器 async updateUserData(请求:请求,响应:响应,下一步:下一步功能){ const{id}=req.params; const{username,status}=req.body作为IBodyData; 试一试{ const userExists=wait kn

我在发送照片时遇到问题,无论是使用Axios还是Fetch,我的Nodejs后端都已配置,整个上传过程在Insonmia的正常测试中正常工作,但在React Native中它无法正常工作

后端-用于更新用户数据的控制器

async updateUserData(请求:请求,响应:响应,下一步:下一步功能){
const{id}=req.params;
const{username,status}=req.body作为IBodyData;
试一试{
const userExists=wait knex('tb_user'))
.其中('id',编号(id))
.first();
如果(!userExists){
返回res.status(400).json({错误:“用户不存在”。});
}
常量序列化DuserInfo={
照片:`${process.env.BASE_URL}/uploads/${req.file.filename}`,
用户名,
地位
};
const updateInfo=await knex('tb\u user')
.更新(序列化DuserInfo)
.其中('id',编号(id));
如果(!updateInfo){
返回res.status(400).json({error:'error updateing data.'});
}
返回res.json(updateInfo);
}捕捉(错误){
返回res.status(500.json)({error:'error on updateing user.'});
}
}
后端-路由

routes.put(
“/updateuser/:id”,
multer(multerConfig).single('userphoto'),
UserController.updateUserData
);
CONFIG MULTER

导出默认值{
fileFilter:(请求:请求、文件、cb)=>{
const allowedMimes=[
“图像/jpeg”,
‘image/jpg’,
'图像/pjpeg',
“图像/png”,
];
如果(!allowedMimes.includes(file.mimetype)){
返回cb(新错误('无效文件类型');
}
返回cb(null,true);
},
限制:{
文件大小:2*1024*1024,
},
存储:multer.diskStorage({
目的地:解析(uu dirname,“…”,“…”,“上载”),
文件名:(请求:请求,文件,cb)=>{
常量文件名=`${randomBytes(6).toString('hex')}-${file.originalname}`;
返回cb(空,文件名);
}
})
}作为选择;
REACT NATIVE-用于获取照片数据和设置状态的函数

函数handleUploadImage(图像:IImagePickerResponse){
if(image.error){
返回;
}
if(image.didconcel){
返回;
}
如果(!image.uri){
返回;
}
设置选定图像({
fileName:image.fileName,
fileSize:image.fileSize,
type:image.type,
uri:image.uri,
});
}
REACT NATIVE-用于在API中发送数据的函数

异步函数handleSaveChange(){
试一试{
const formData=new formData();
formData.append('userphoto'{
uri:
Platform.OS==='android'
?选择eImage?.uri
:选择edimage?.uri?.replace('file://',''),
类型:选择edimage.type,
名称:selectedImage.fileName,
});
append('username',usernameInput);
formData.append('status',statusInput);
console.log(formData);
等待api.put(`/updateuser/${userData?.id}`,formData{
标题:{
“内容类型”:“多部分/表单数据”,
},
});
//const updateUser=wait fetch('http://192.168.2.8:3333/updateuser/1', {
//方法:“POST”,
//标题:{
//“内容类型”:“多部分/表单数据”,
//   },
//正文:formData,
// })
//。然后((响应)=>{
//json();
//   })
//。然后((响应)=>{
//控制台日志(响应);
//   })
//.catch((err)=>console.log(err));
回敬祝酒词:成功(Informações alteradas com successo.);
}捕捉(错误){
const{error}=err.response.data;
返回Toast.error(error);
}
}
obs:需要注意的是,在
formData.append('userphoto',value)
部分中,如果值发送了一个正常的json对象,则不会发出请求,也不会出现
网络错误
错误,即使IP地址也正确端口,而且如果我使用
formData.append('userphoto',json.stringy(value))
请求正常发出,但在后端,照片以
未定义的方式到达,其余字段正常发送和接收

我真的尝试了几件事,但我没有成功,我将PUT方法的类型更改为POST,添加
'Accept':'application/json'
,但没有成功,正如我所说的,正常的发送工作正常

最后,这里是我用来获取照片的lib配置:

反应本机图像选择器

ImagePicker.showImagePicker(
{
标题:“Selecione uma imagem”,
TakephotoButtol:“Tirar foto”,
从Library按钮中选择:“Escolher da galeria”,
CancelButtonTile:“Cancelar”,
野田:是的,
//存储选项:{
//skipBackup:没错,
//路径:'图像',
//是的,
//waitUntilSaved:是的,
// },
},
手绘照片,
)
已解决

显然这是React Native版本的问题,我目前使用的是0.62.XX版本

要解决此问题,只需注释文件中的第43行:

android/app/src/debug/java/com/mobile/ReactNativeFlipper.java

代码如下:

builder.addNetworkInterceptor(新的FlipperOkhttpInterceptor(networkFlipperPlugin))


在上传之前,您是否可以通过添加
控制台.log
?@eol验证
selectedImage?.uri
是否存在?我刚刚修改了此处的代码,以实现您向我建议的更改,正如我前面所说的,如果我发送
formData.append('userphoto',{…})
它返回以下错误:[TypeError:Network request failed]关于“selectedImage?.uri”,它有正确的uri。奇怪的是,github()上有一个公开的问题,mayb