来自 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" 上面的解码字符串),然后传输数据(文件)。

Apple Docs

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

就是这样,调用此方法后,可以读取文件并且内容是正确的,而不是元数据。