Как показать данные PDF из файлового потока

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

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

Я использую Swift 3, iOS 10, Xcode 8.


person user2856066    schedule 20.12.2016    source источник
comment
Прежде всего, вы можете сохранить файловый поток в формате PDF? если да, то вы можете использовать веб-просмотры, чтобы показать данные PDF в вашем приложении.   -  person Arun K    schedule 20.12.2016
comment
В этом вопросе много пояснений. Вы лучше спрашивайте отдельно по каждой теме (например. Скачать pdf и сохранить, как читать pdf, который сохранил)   -  person Thiha Aung    schedule 20.12.2016
comment
Позже сегодня я проверю ответ ниже — загрузите и сохраните с помощью Alamofire. Но это никогда не было планом с самого начала (и не в вопросе). Я надеялся, что мне не нужно идти кидать файловую систему, потому что мне нужно загрузить несколько файлов pdf, и в конце я хотел бы показать их в виде коллекции. Я также не уверен, смогу ли я использовать файловую систему в симуляторе. Но лучшее решение должно быть таким, как я делаю с изображениями, просто пусть image = UIImage(data: data), а затем показывает изображение в виде таблицы/коллекции.   -  person user2856066    schedule 20.12.2016


Ответы (1)


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

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

<сильный>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)
     }
}

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

person Thiha Aung    schedule 20.12.2016
comment
Спасибо за предложение, я использую пусть назначение = DownloadRequest.suggestedDownloadDestination (для: .documentDirectory), а затем локальную загрузку в WKWebView, и это работает. Теперь мне просто интересно, что происходит с локальным файлом, если он удаляется, когда я закрываю приложение, и перезаписывает ли он файл при других загрузках, поэтому я не заполняю свою память. Мне нужно это проверить. - person user2856066; 21.12.2016