2016-12-20 2 views
2

Je travaille sur un REST API où vous pouvez passer un appel, puis recevoir une image ou un fichier pdf. J'utilise URLSession.shared.dataTask pour faire l'appel et quand il y a une image l'appel est un succès (mais cela prend pas mal de temps, plus de 5 secondes) et je peux montrer l'image dans un UIImageView. Mais quand il y a un pdf, je ne sais pas comment gérer le résultat. L'API renvoie l'image/pdf en tant que "filetream". Lorsque j'imprime les données à la console, il imprime la taille (octets) et c'est la même taille que dans le serveur de sorte que d'une certaine manière, j'ai les données correctes, je ne sais pas comment afficher le pdf.Comment afficher les données pdf à partir d'un flux de fichiers

J'utilise rapidement 3, iOS 10, Xcode 8.

+1

Tout d'abord, pouvez-vous enregistrer le flux de fichiers au format pdf? Si oui, vous pouvez utiliser les webviews pour montrer les données pdf à votre application –

+0

Il y a beaucoup d'explications dans cette question. Il vaut mieux demander séparément sur chaque sujet (par exemple, télécharger le pdf et enregistrer, comment lire le pdf qui a sauvé) –

+0

Plus tard aujourd'hui, je vais tester la réponse ci-dessous - télécharger et enregistrer avec Alamofire. Mais, ce n'était jamais le plan depuis le début (et pas dans la question). J'espérais que je n'aurais pas besoin d'aller jeter le système de fichiers parce que j'ai besoin de télécharger plusieurs fichiers pdf et à la fin je voudrais les montrer dans une collection. Je ne suis pas sûr de pouvoir utiliser le système de fichiers dans le simulateur. Mais la meilleure solution devrait être comme je le fais avec les images, il suffit de laisser image = UIImage (données: données) et ensuite montrer l'image dans une tableview/collection. – user2856066

Répondre

0

Tout d'abord, vous pouvez poser votre question en deux parties. Veuillez l'éditer et demander à nouveau la deuxième partie.

Il y a deux parties dans ce sujet

1. Téléchargement du PDF et l'enregistrer dans le système de fichiers

2. Obtenez le PDF enregistré dans le système de fichiers et le lire à l'aide UIWebView ou UIDocumentInteractionController

Donc, je vais vous expliquer pour le premier.

Le premier peut être fait si vous utilisez le client HTTP REST: Alamofire : Elegant HTTP Networking in Swift. Donc, pas besoin d'utiliser URLSession pour un tel cas et vous devrez écrire autant de lignes si vous le faites. C'est simple et facile. Donc, je veux que vous l'essayiez. Si vous avez besoin de URLSession à la place, laissez un commentaire.

Alors, comment télécharger le pdf en utilisant Alamofire:

let destination: DownloadRequest.DownloadFileDestination = { _, _ in 
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
//.documentDirectory means it will store in Application Document Folder 
let fileURL = documentsURL.appendPathComponent("data.pdf") 

     return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) 
} 

Alamofire.download(urlString, to: destination).response { response in 
print(response) 

    if response.error == nil, let filePath = response.destinationURL?.path { 
      // do anything you want with filePath here. 
      // Here what you have to do Step 2. (Read the file that you downloaded) 
    } 
} 

Cette procédure de téléchargement ne comprend pas la demande lien de téléchargement avec des paramètres encodées. C'était juste un moyen simple.

+0

Merci pour la suggestion, j'utilise destination = DownloadRequest.suggestedDownloadDestination (pour: .documentDirectory), puis une charge locale dans WKWebView et cela fonctionne. Maintenant, je me demandais juste ce qui se passe avec le fichier local, si elle est supprimée lorsque je ferme l'application et si elle écrase le fichier dans d'autres téléchargements, donc je ne remplis pas ma mémoire. Je dois vérifier ça. – user2856066