Javascript 如何在react native中将内部存储映像上载到服务器。图像未上载到服务器。以自然反应
我是个新来的本地人。我正在尝试上载存储在内部存储器中的数字签名图像。 路径如下=“/storage/emulated/0/DCIM/1616657741752.png”。 但是,如果不上载图像,则认为问题在于此路径-“/storage/emulated/0”。 因为在此路径“/storage/emulated/0”中没有名为DCIM的文件夹。 因此,我使用下面的代码删除了这个-“/storage/emulated/0”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
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'。然后它就开始工作了