J'utilise react-native-fetch-blob pour télécharger des fichiers mp3, puis les lire plus tard. Le problème est que le chemin réel pour RNFetchBlob.fs.dirs.DocumentDir
change lorsque je ferme l'application et redémarre à nouveau, ce qui signifie que je ne peux pas utiliser le chemin d'accès absolu que j'ai stocké après avoir téléchargé les fichiers récupérer les fichiers lors de la prochaine exécution de l'application.Comment télécharger et récupérer des fichiers locaux sur iOS avec react native et react-native-fetch-blob?
Voici mon code pour le téléchargement et le stockage des chemins de fichiers:
export function downloadAudio(urlArray) { //download every section in the urlArray
return (dispatch) => {
Promise.all(urlArray.map(section => {
dispatch(startDownload(section.section_id))
console.log('download start for id = ',section.section_id) //start download
return RNFetchBlob
.config({
path: RNFetchBlob.fs.dirs.DocumentDir + '/courseSections/' + section.section_id + '.mp3',
appendExt: 'mp3'
})
.fetch('GET', section.section_url, {
'Cache-Control': 'no-store'
})
.progress({ count: 10 }, (received, total) => {
console.log(`progress for section ${section.section_id}: `, Math.floor(received/total*100), '%')
dispatch(downloadProgress({id: section.section_id, progress: Math.floor(received/total*100)/100}))
})
.then(res => {
console.log(`section ${section.section_id} is saved to: `, res.path())
return { path: res.path(), id: section.section_id }
})
.then(pathInfo => dispatch(downloadSuccess(pathInfo))) //download finished
}))
.catch((error, statusCode) => {
console.log(statusCode, ' error: ', error)
})
}
}
J'emmagasinés { path: res.path(), id: section.section_id }
dans le cadre de l'état d'application persistait. Mais ce n'est pas utile parce que la prochaine fois que j'ouvre l'application, le chemin du fichier a été réaffecté. Par exemple, voici le chemin d'un fichier a été téléchargé sur: downloaded file path
Mais après je ferme l'application et le redémarrage, le chemin est changé: /Users/NatashaChe/Library/Developer/CoreSimulator/Devices/830778DE-3CE3-4FC7-AA4B-DFBAE999751C/data/Containers/Data/Application/0C47E33F-ACF8-4539-9456-8FF3E8FBECB2/Documents/courseSections/14.mp3
-à-dire les fichiers ont été assignés à un sous-dossier différent sous le dossier Application
.
Il est évident que le lecteur audio (j'utilise le son natif de réaction) ne peut pas trouver le fichier en utilisant le chemin d'origine que l'application a stocké. Donc ma question est: Y a-t-il un moyen de réparer le chemin? Ou existe-t-il un autre moyen de récupérer des fichiers que je ne connais pas?
Et aussi, j'utilise le simulateur iOS sur mon ordinateur. Je n'ai pas encore essayé ça au téléphone. Est-ce que quelqu'un sait si le code ci-dessus peut être directement utilisé sur iphone et avoir le fichier enregistré dans le répertoire de mon application? Ou dois-je définir le chemin du fichier d'une autre manière? J'utilise reac native 0.41.