来自 iCloud 的文件的无效编码内容
Invalid encoded content of file from iCloud
我正在尝试读取 iCloud 中存在的文件的内容,我尝试使用 react-native-fs or react-native-fetch-blob 并且两个库给出相同的结果,所以问题应该是客观的 c 端,这里是代码:
如果我手动下载文件并查看编码内容,我会看到正确的数据,一个像这样的编码字符串(这就是我需要的):
U2FsdGVkX19qe+9FMvVqZBb7U6E3g1ynMqBwYUosBiOv7b5rF4/dVenIfPvWuiiCxEHhN5ILrYdBDnPLqcytWO8KjBV4XuN2MvduBDNiB090vhVJnq+7jtOQZ7+uXbEZil9j2zyVRxTul2RTs/Uh3HglbK3iiExypcDRPGtfGB/OPncuaYq5ggxzHu26Ii6VJcBvmQVyTth9JG9wNYa6l+2FlTTqcdp/0Xr8/KamERw8xje9qVnLExLL8xjG8JhBTlLwVaMGnIiLee20wGXNhzzHdUwEDnHDZAo8wzcFAnG7605h/6S6vG6p25+gsOnC2Tc2xwOigrAJC7TuPN81ZZC8pdkzwtgktG9I7tOxyfbdw87t8/jw/CbIJr4m8ckxQy/kvEy6aApeYmhlX9L0rQ==
BUT,当我使用来自 React Native 的上述库通过文件系统读取同一文件的内容时,我得到了这个:
YnBsaXN0MDDTAQIDBAUGXE5TVVJMTmFtZUtleV8QEE5TVVJMRmlsZVNpemVLZXlfEBhOU1VSTEZpbGVSZXNvdXJjZVR5cGVLZXlcbG9ja3kuYmFja3VwEQGYXxAcTlNVUkxGaWxlUmVzb3VyY2VUeXBlUmVndWxhcggPHC9KV1oAAAAAAAABAQAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAeQ==
解码后的字符串是:
bplist00Ó\NSURLNameKey_NSURLFileSizeKey_NSURLFileResourceTypeKey\locky.backup_NSURLFileResourceTypeRegular/JWZy
WTF?
javascript 两个库中的代码,相同的结果
// react-native-fs
RNFS.readFile(backup.path, 'base64')
.then((content) => {
console.log(content, atob(content))
})
.catch((err) => {
console.log('error', err)
})
// react-native-fetch-blob
RNFetchBlob.fs.readFile(backup.path, 'utf8')
.then((data) => {
console.log(data)
// handle the data ..
})
有什么建议吗?
谢谢
问题来了,当您的应用第一次将文档的磁盘表示添加到 iCloud(无处不在)容器时,系统将整个文件或文件包传输到 iCloud 服务器,此任务首先创建文档的元数据, 其中包含文档名称、修改日期、文件大小、文件类型等信息("wrong" 上面的解码字符串),然后传输数据(文件)。
In iOS, apps must ask the system (either explicitly or implicitly) to download the file. You implicitly download a file by trying to access that file by using methods in the NSFileCoordinator class, or you explicitly download the file by invoking the startDownloadingUbiquitousItemAtURL:error: method in the NSFileManager class
就是这样,调用此方法后,可以读取文件并且内容是正确的,而不是元数据。
我正在尝试读取 iCloud 中存在的文件的内容,我尝试使用 react-native-fs or react-native-fetch-blob 并且两个库给出相同的结果,所以问题应该是客观的 c 端,这里是代码:
如果我手动下载文件并查看编码内容,我会看到正确的数据,一个像这样的编码字符串(这就是我需要的):
U2FsdGVkX19qe+9FMvVqZBb7U6E3g1ynMqBwYUosBiOv7b5rF4/dVenIfPvWuiiCxEHhN5ILrYdBDnPLqcytWO8KjBV4XuN2MvduBDNiB090vhVJnq+7jtOQZ7+uXbEZil9j2zyVRxTul2RTs/Uh3HglbK3iiExypcDRPGtfGB/OPncuaYq5ggxzHu26Ii6VJcBvmQVyTth9JG9wNYa6l+2FlTTqcdp/0Xr8/KamERw8xje9qVnLExLL8xjG8JhBTlLwVaMGnIiLee20wGXNhzzHdUwEDnHDZAo8wzcFAnG7605h/6S6vG6p25+gsOnC2Tc2xwOigrAJC7TuPN81ZZC8pdkzwtgktG9I7tOxyfbdw87t8/jw/CbIJr4m8ckxQy/kvEy6aApeYmhlX9L0rQ==
BUT,当我使用来自 React Native 的上述库通过文件系统读取同一文件的内容时,我得到了这个:
YnBsaXN0MDDTAQIDBAUGXE5TVVJMTmFtZUtleV8QEE5TVVJMRmlsZVNpemVLZXlfEBhOU1VSTEZpbGVSZXNvdXJjZVR5cGVLZXlcbG9ja3kuYmFja3VwEQGYXxAcTlNVUkxGaWxlUmVzb3VyY2VUeXBlUmVndWxhcggPHC9KV1oAAAAAAAABAQAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAeQ==
解码后的字符串是:
bplist00Ó\NSURLNameKey_NSURLFileSizeKey_NSURLFileResourceTypeKey\locky.backup_NSURLFileResourceTypeRegular/JWZy
WTF?
javascript 两个库中的代码,相同的结果
// react-native-fs
RNFS.readFile(backup.path, 'base64')
.then((content) => {
console.log(content, atob(content))
})
.catch((err) => {
console.log('error', err)
})
// react-native-fetch-blob
RNFetchBlob.fs.readFile(backup.path, 'utf8')
.then((data) => {
console.log(data)
// handle the data ..
})
有什么建议吗? 谢谢
问题来了,当您的应用第一次将文档的磁盘表示添加到 iCloud(无处不在)容器时,系统将整个文件或文件包传输到 iCloud 服务器,此任务首先创建文档的元数据, 其中包含文档名称、修改日期、文件大小、文件类型等信息("wrong" 上面的解码字符串),然后传输数据(文件)。
In iOS, apps must ask the system (either explicitly or implicitly) to download the file. You implicitly download a file by trying to access that file by using methods in the NSFileCoordinator class, or you explicitly download the file by invoking the startDownloadingUbiquitousItemAtURL:error: method in the NSFileManager class
就是这样,调用此方法后,可以读取文件并且内容是正确的,而不是元数据。