2017-06-14 1 views
5

Je construis une application avec React Native, pour Android et iOS. J'essaie de laisser l'utilisateur télécharger un fichier PDF en cliquant sur un bouton.Comment télécharger un fichier avec React Native?

  • react-native-file-download ne supporte pas Android
  • react-native-fs ne fait rien quand je déclenche downloadFile (rien apparaît sur la barre de notification), et je ne suis pas en mesure de trouver le fichier après. J'ai ajouté android.permission.WRITE_EXTERNAL_STORAGE au fichier manifeste Android. J'ai revérifié que le fichier que j'essaye de télécharger existe (quand il ne le fait pas, la bibliothèque jette une erreur)

Je ne trouve pas d'autres solutions pour ce problème. J'ai trouvé des bibliothèques pour visualiser un PDF, mais je voudrais laisser l'utilisateur télécharger le PDF. Pourrais-tu m'aider s'il te plait?

Répondre

5

vient d'implémenter la fonctionnalité de téléchargement il y a une heure: p

Suivez ces étapes:

a) NPM installer réagir natif-fetch-blob b) suivre les instructions d'installation. b2) si vous souhaitez installer manuellement le package sans utiliser rnpm, accédez à wiki. c) Enfin, voilà comment je l'ai fait possible de télécharger des fichiers dans mon application:

const { config, fs } = RNFetchBlob 
let PictureDir = fs.dirs.PictureDir // this is the pictures directory. You can check the available directories in the wiki. 
let options = { 
    fileCache: true, 
    addAndroidDownloads : { 
    useDownloadManager : true, // setting it to true will use the device's native download manager and will be shown in the notification bar. 
    notification : false, 
    path: PictureDir + "/me_"+Math.floor(date.getTime() + date.getSeconds()/2), // this is the path where your downloaded file will live in 
    description : 'Downloading image.' 
    } 
} 
config(options).fetch('GET', "http://www.example.com/example.pdf").then((res) => { 
    // do some magic here 
}) 
+0

Merci beaucoup :) – Arnaud

2

Si vous utilisez Expo, react-native-fetch-blob ne fonctionnera pas. Utilisez FileSystem.

Voici un exemple de travail:

const { uri: localUri } = await FileSystem.downloadAsync(remoteUri, FileSystem.documentDirectory + 'name.ext'); 

Maintenant vous avez localUri avec le chemin d'accès au fichier téléchargé. N'hésitez pas à définir votre propre nom de fichier au lieu de name.ext.

+0

Mon serveur demande un jeton OAuth d'autorisation afin de permettre le téléchargement. Y at-il un moyen de joindre un en-tête? – EnriqueDev

+0

@ EnriqueDev Je ne pense pas, mais vous pouvez contourner cela - il suffit de mettre votre jeton dans un paramètre GET, et d'ajuster votre serveur pour le gérer de cette façon –

+0

Oui, je sais. Mais alors comment puis-je enregistrer les données de résultat dans le système de fichiers du téléphone? – EnriqueDev