我正试图写一些代码来将照片数据保存到文件中.
我读入照片数据,它是react native(Expo)的base64字符串,然后我对其进行解码.我立即将解码后的字符串写入文件.
当我读到应该包含所有照片数据的文件时,我得到的只是4个字符,而我期望有很多兆字节的字符.
有人知道如何使用Expo将解码后的base64字符串写入文件吗?下面是我的代码...
const fileUri = `${directoryPath}/${today.getTime()}/${fileName}`;
// this reads us the base64 encoded image data
const imageString = await FileSystem.readAsStringAsync(
image.uri,
{ encoding: FileSystem.EncodingType.Base64 }
);
const fooString = Base64.decode(imageString);
// write the decoded photo data to a file
await FileSystem.writeAsStringAsync(fileUri, fooString);
// read back the file so we can make sure all the data was written
const blah = await FileSystem.readAsStringAsync(fileUri);
const photoInfo = await FileSystem.getInfoAsync(fileUri);
console.log({
fileUri,
fooStringLength: fooString.length,
blahLength: blah.length,
equals: blah === fooString,
photoInfo
});
你可以看到这很简单,所以我一定错过了什么?下面是这console.log
个...
Object {
"blahLength": 4,
"equals": false,
"fileUri": "file:///var/mobile/Containers/Data/Application/33EB7A6F-AA1A-42BF-B252-9A5088A906C6/Documents/ExponentExperienceData/%2540anonymous%252FWIB-mobile-12902e68-9c57-4230-a3df-aaa355c3edf1/20220328184945/1648511392902/Right.jpg.enc",
"fooStringLength": 2953317,
"photoInfo": Object {
"exists": true,
"isDirectory": false,
"modificationTime": 1648511394.334474,
"size": 4415423,
"uri": "file:///var/mobile/Containers/Data/Application/33EB7A6F-AA1A-42BF-B252-9A5088A906C6/Documents/ExponentExperienceData/%2540anonymous%252FWIB-mobile-12902e68-9c57-4230-a3df-aaa355c3edf1/20220328184945/1648511392902/Right.jpg.enc",
},
}
你可以看到长度不匹配.此外,如果我同时打印出fooString
和blah
,这是用于比较的前后字符串,fooString
在我看来是正确的,我希望它看起来是正确的,但blah
只相当于4个字符的数据.下面是blah
字符串和文件的错误内容...
我修改了现有的零食以显示我的情况.该小吃提供了拍照或 Select 现有照片的选项.我将代码放入"从照片库处理程序中 Select 现有照片"中.这个小吃显示,当我将数据写入文件,然后将其读回时,数据不匹配.知道为什么吗?