2017-08-10 1 views
0

J'essaie de lire le contenu d'un fichier qui existe dans iCloud, j'ai essayé d'utiliser react-native-fs ou react-native-fetch-blob et les deux bibliothèques donnent le même résultat, donc la question devrait être côté objetive, voici le code:Contenu codé invalide du fichier de iCloud

Si je télécharge le fichier manuellement et voir le contenu codé, je vois des données correctes, une chaîne codée comme celui-ci (thi est ce que je dois):

U2FsdGVkX19qe+9FMvVqZBb7U6E3g1ynMqBwYUosBiOv7b5rF4/dVenIfPvWuiiCxEHhN5ILrYdBDnPLqcytWO8KjBV4XuN2MvduBDNiB090vhVJnq+7jtOQZ7+uXbEZil9j2zyVRxTul2RTs/Uh3HglbK3iiExypcDRPGtfGB/OPncuaYq5ggxzHu26Ii6VJcBvmQVyTth9JG9wNYa6l+2FlTTqcdp/0Xr8/KamERw8xje9qVnLExLL8xjG8JhBTlLwVaMGnIiLee20wGXNhzzHdUwEDnHDZAo8wzcFAnG7605h/6S6vG6p25+gsOnC2Tc2xwOigrAJC7TuPN81ZZC8pdkzwtgktG9I7tOxyfbdw87t8/jw/CbIJr4m8ckxQy/kvEy6aApeYmhlX9L0rQ== 

MAIS, quand je lis le contenu du même fichier via le système de fichiers en utilisant les libs ci-dessus de réagir natif je reçois ceci:

YnBsaXN0MDDTAQIDBAUGXE5TVVJMTmFtZUtleV8QEE5TVVJMRmlsZVNpemVLZXlfEBhOU1VSTEZpbGVSZXNvdXJjZVR5cGVLZXlcbG9ja3kuYmFja3VwEQGYXxAcTlNVUkxGaWxlUmVzb3VyY2VUeXBlUmVndWxhcggPHC9KV1oAAAAAAAABAQAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAeQ== 

Cette chaîne est décodé:

bplist00Ó\NSURLNameKey_NSURLFileSizeKey_NSURLFileResourceTypeKey\locky.backup_NSURLFileResourceTypeRegular/JWZy 

WTF?

javascript code dans les deux libs, même résultat

// 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 .. 
}) 

Un conseil? Merci

Répondre

0

Voici le problème, la première fois que votre application ajoute la représentation sur un disque à un conteneur iCloud (ubiquity), le système transfère l'ensemble du fichier ou package au serveur iCloud, cette tâche crée les métadonnées du document d'abord, qui comprend des informations telles que le nom du document, la date de modification, la taille du fichier et le type de fichier (chaîne décodée "incorrecte" ci-dessus), puis transférez les données (fichier).

Dans 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

et voilà, après appel ces méthodes, le fichier peut être lu et son contenu est correct au lieu de métadonnées.