Javascript 如何在react native中将内部存储映像上载到服务器。图像未上载到服务器。以自然反应

Javascript 如何在react native中将内部存储映像上载到服务器。图像未上载到服务器。以自然反应,javascript,react-native,file-upload,server,digital-signature,Javascript,React Native,File Upload,Server,Digital Signature,我是个新来的本地人。我正在尝试上载存储在内部存储器中的数字签名图像。 路径如下=“/storage/emulated/0/DCIM/1616657741752.png”。 但是,如果不上载图像,则认为问题在于此路径-“/storage/emulated/0”。 因为在此路径“/storage/emulated/0”中没有名为DCIM的文件夹。 因此,我使用下面的代码删除了这个-“/storage/emulated/0” this.setState({base64: paths.split('/s

我是个新来的本地人。我正在尝试上载存储在内部存储器中的数字签名图像。 路径如下=“/storage/emulated/0/DCIM/1616657741752.png”。 但是,如果不上载图像,则认为问题在于此路径-“/storage/emulated/0”。 因为在此路径“/storage/emulated/0”中没有名为DCIM的文件夹。 因此,我使用下面的代码删除了这个-“/storage/emulated/0”

this.setState({base64: paths.split('/storage/emulated/0').pop()})
但还是一样的问题,我的图像没有上传到服务器。我的图像在DCIM文件夹中的手机内部存储器中始终可见。我不知道现在该怎么办。 这是我的密码

 base64:null,

_onSaveEvent = (result) => {
    this.checkAndroidPermission(result)
    }
    
    checkAndroidPermission = async (result) => {
    if (Platform.OS === 'ios') {
    save(result);
    } else {
    try {
    const granted = await PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
    );
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
    // Once user grant the permission start downloading
    
    this.save(result);
    } else {
    if (Platform.OS === 'android') {
    ToastAndroid.show('Storage Permission denied.', ToastAndroid.SHORT);
    } else {
    AlertIOS.alert('Storage Permission denied.');
    }
    }
    } catch (err) {
    // To handle permission related exception
    console.warn('tryerr', err);
    }
    }
    };
    
    save = async (result) => {
    const paths = `${
    RNFetchBlob.fs.dirs.DCIMDir
    }/${new Date().getTime()}.png`; // where u need to put that
    try {
    RNFetchBlob.fs
    .writeFile(paths, result.encoded, 'base64')//data.base64 is your photo with convert base64
    .then((value) => {
    RNFetchBlob.fs
    .scanFile([{path: paths}]) //after save to notify gallry for that
    .then(() => {
      this.setState({base64: paths.split('/storage/emulated/0').pop()})
    console.log('scan file success');
    console.log("this is fuckiiing file"+ this.state.base64)
    })
    .catch((err) => {
    console.log('scan file error');
    });
    })
    .catch((e) => console.log(e.message));
    } catch (error) {
    console.log('fileerror', error.message);
    }
    
    }


 
         formData.append('digital_signature',this.state.base64);

    console.log(JSON.stringify(formData))
    fetch('https://abc.tech/Android_API_CI/upload_multipart_data',
      {
        method: 'post',
          body : formData, 
          
        headers: {
          'Content-Type': 'multipart/form-data;',
        },



 <SignatureCapture
                              style={styles.signature}
                              ref="sign"
                              onSaveEvent={this._onSaveEvent}
                              onDragEvent={this._onDragEvent}
                              saveImageFileInExtStorage={true}
                              showNativeButtons={false}
                              showTitleLabel={false}
                              viewMode={'portrait'}
                            />
base64:null,
_onSaveEvent=(结果)=>{
此.checkAndroidPermission(结果)
}
checkAndroidPermission=async(结果)=>{
如果(Platform.OS==='ios'){
保存(结果);
}否则{
试一试{
授予的常数=等待许可和ROID.request(
PERMISSIONS和roid.PERMISSIONS.WRITE\u外部存储,
);
如果(已授予===权限sandroid.RESULTS.已授予){
//一旦用户授予权限,开始下载
保存(结果);
}否则{
如果(Platform.OS==='android'){
ToastAndroid.show('存储权限被拒绝',ToastAndroid.SHORT);
}否则{
AlertIOS.alert('存储权限被拒绝');
}
}
}捕捉(错误){
//处理权限相关异常的步骤
console.warn('tryer',err);
}
}
};
保存=异步(结果)=>{
常量路径=`${
RNFetchBlob.fs.dirs.DCIMDir
}/${new Date().getTime()}.png`;//需要放在哪里
试一试{
RNFetchBlob.fs
.writeFile(路径,result.encoded,'base64')//data.base64是您与convert base64的照片
。然后((值)=>{
RNFetchBlob.fs
.scanFile([{path:paths}])//保存后通知gallry
.然后(()=>{
this.setState({base64:path.split('/storage/emulated/0').pop()})
log(“扫描文件成功”);
log(“这是他妈的文件”+this.state.base64)
})
.catch((错误)=>{
log('scan file error');
});
})
.catch((e)=>console.log(e.message));
}捕获(错误){
console.log('fileerror',error.message);
}
}
formData.append('digital_signature',this.state.base64);
log(JSON.stringify(formData))
取('https://abc.tech/Android_API_CI/upload_multipart_data',
{
方法:“post”,
正文:formData,
标题:{
“内容类型”:“多部分/表单数据;”,
},

这是您的Ans,也可用于功能,这可能会有所帮助

const file = {
      uri:
        Platform.OS == 'android'
          ? '/storage/emulated/0/DCIM/1616657741752.png' //path to your file 
          : 'file:///storage/emulated/0/DCIM/1616657741752.png',
      name: 'sign.png', // which go on server on your file name
      type: 'image/png', // e.g. 'image/jpg'
    };
    

formData.append('digital_signature',file);

    console.log(JSON.stringify(formData))
    fetch('https://abc.tech/Android_API_CI/upload_multipart_data',
      {
        method: 'post',
          body : formData, 
          
        headers: {
          'Content-Type': 'multipart/form-data;',
        },

没有人。它说网络请求失败。我想我必须改变图像路径。因为我的另一张图像是我用图像采集器从相机拍摄的。正在上传到服务器上,路径是这样的=[“upload_pancard”,{“uri”:"file:///data/user/0/com.nasdigitalapp/cache/rn_image_picker_lib_temp_d27ae8b2-8ed9-4f45-b39c-278878ee1fb8.jpg“,”name“:”pancardImage.jpg“,”type“:”image/*”}]非常感谢兄弟非常非常非常感谢。我只是用我们的路径替换了这个='/storage/emulated/0/DCIM/1616657741752.png'。然后它就开始工作了