2016-12-20 3 views
2

Я работаю против REST API, где вы можете позвонить, а затем получить изображение или pdf. Я использую URLSession.shared.dataTask, чтобы сделать звонок, и когда есть изображение, звонок имеет успех (но это занимает довольно много времени, более 5 секунд), и я могу показать изображение в UIImageView. Но когда есть pdf-файл, я не знаю, как обрабатывать результат. API возвращает изображение/pdf как «filestream».Как показать данные в формате pdf из файла

Когда я печатаю данные на консоль, он печатает размер (байты) и тот же размер, что и на сервере, поэтому у меня есть правильные данные, я просто не знаю, как просматривать pdf.

Я использую скор 3, IOS 10, Xcode 8.

+1

Прежде всего, вы можете сохранить filestream в формате pdf? если да, то вы можете использовать веб-просмотр, чтобы показать данные в формате pdf для вашего приложения. –

+0

В этом вопросе есть много объяснений. Вам лучше спросить отдельно по каждой теме (например, загрузить pdf-файл и сохранить, как прочитать сохраненный pdf-файл) –

+0

Позже сегодня я проверю ответ ниже - загрузите и сохраните с помощью Alamofire. Но это никогда не было планом с самого начала (а не в вопросе). Я надеялся, что мне не нужно бросать файловую систему, потому что мне нужно загрузить несколько файлов в формате PDF, и в конце я хотел бы показать их в коллекции. Я также не уверен, могу ли я использовать файловую систему в симуляторе. Но самое приятное решение должно быть как у меня с изображениями, просто позвольте image = UIImage (данные: данные), а затем покажет изображение в виде таблицы/коллекции. – user2856066

ответ

0

Прежде всего, вы можете задать свой вопрос на две части. Пожалуйста, отредактируйте его и повторите вторую часть.

Есть две части в этой теме

1. Загрузка в формате PDF и сохранить его в файловой системе

2. Получить PDF, который сохранен в файловой системе и читать его с помощью UIWebView или UIDocumentInteractionController

Итак, я объясню для первого.

Первый может быть выполнен, если вы используете HTTP-клиент REST: Alamofire : Elegant HTTP Networking in Swift. Поэтому нет необходимости использовать URLSession для такого случая, и вам придется писать так много строк, если вы это сделаете. Это просто и легко. Итак, я хочу, чтобы вы попробовали. Если вам нужно URLSession, оставьте комментарий.

Так как скачать PDF с помощью 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) 
    } 
} 

Эта процедура загрузки не включает запроса ссылки на скачивание с закодированными параметрами. Это был просто простой способ.

+0

Спасибо за предложение, я использую let destination = DownloadRequest.sposedDownloadDestination (для: .documentDirectory), а затем локальную нагрузку в WKWebView, и он работает. Теперь мне просто интересно, что происходит с локальным файлом, если он удаляется при закрытии приложения и если он перезаписывает файл в других файлах, поэтому я не заполняю свою память. Мне нужно это проверить. – user2856066