2016-09-04 3 views
0

Загрузите внешний файл pdf, используя этот способ Alamofire.Продолжить загрузку файла (кэш) для приложения в следующий раз Откройте

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

Я использую следующий метод для загрузки

let destination = 
     Alamofire.Request.suggestedDownloadDestination(directory: .CachesDirectory, 
                 domain: .UserDomainMask); 

    Alamofire.download(.GET, urlString, destination: destination) 
     .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in 

     } 
     .response { request, response, _, error in 

      print("Downloaded to \(destination(NSURL(string: "")!, response!))"); 

    } 

downloadedFilePath что-то вроде этого.

file:///var/mobile/Containers/Data/Application/4957AD15-947A-47D6-A126-EA06A5BCB099/Library/Caches/RewardMe-Presentation-at-NVIDIA-Auditorium.pdf 

Как сохранить файл при следующем запуске приложения?

Я сохранил этот путь в NSUserDefaults при следующем запуске приложения, но файл уже исчез.

+0

просто сохраните файл в NSDocumentDirectory или в NSBundle и после этого получите его оттуда –

+0

Как это достичь? @AbdulRehmanWarraich – JayVDiyk

ответ

0

Существует несколько функций, которые добавляют их в код и вызывают copyFile, где вы показываете путь или после этого.

func getPath(fileName: String) -> String { 

     let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] 
     let fileURL = documentsURL.URLByAppendingPathComponent(fileName) 


     print("File Path Is : \(fileURL)") 

     return fileURL.path! 
    } 

func copyFile(fileName: NSString , filePath : NSString) { 
     let dPath: String = getPath(fileName as String) 
     let fileManager = NSFileManager.defaultManager() 
     if !fileManager.fileExistsAtPath(dPath) { 



      let fromPath : NSURL = NSURL.fileURLWithPath(filePath);    
      var error : NSError? 
      do { 
       try fileManager.copyItemAtPath(fromPath.path!, toPath: dPath) 
      } catch let error1 as NSError { 
       error = error1 
      } 
      let alert: UIAlertView = UIAlertView() 
      if (error != nil) { 
       alert.title = "Error Occured" 
       alert.message = error?.localizedDescription 
      } else { 
       alert.title = "Successfully Copy" 
       alert.message = "Your File copy successfully" 
      } 
      alert.delegate = nil 
      alert.addButtonWithTitle("Ok") 
      alert.show() 
     } 
    } 

CopyFile два параметра одно имя файла для файла, который вы хотите сохранить и второй находится где находится файл.

И для проверки того, что делать в следующий раз при открытии приложения. Сначала найдите путь к файлу и проверьте, существует ли файл. Если существует d, не загружайте файл, иначе загружайте файл.

let filePath: String = getPath("testFile.pdf") 
     let fileManager = NSFileManager.defaultManager() 
     if fileManager.fileExistsAtPath(dPath) { 
     //Code for using the file data 
     } 
else { 
//Download code for the file 
} 

Надеется, что это помогает :)

0

HTTP уже имеет механизм кэширования, вы могли бы рассмотреть возможность его использование. Не заново изобретайте колесо. Here - способ сделать это.