2015-08-11 3 views
3

У меня есть видеофайл на S3, который я пытаюсь сохранить на диске. Однако, если файл уже существует на диске, я хочу его перезаписать. Я написал эту функцию для загрузки файла, но он никогда не сохраняет файл. Я вижу прогресс, который увеличивается. Но как мне получить доступ к результирующему файлу и сохранить его на диск?Alamofire не сохраняет файл на диск

var finalPath: NSURL? 

    Alamofire.download(.GET, s3Url) { temporaryURL, response in 
     let fileManager = NSFileManager.defaultManager() 
     if let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL { 
      let pathComponent = response.suggestedFilename 
      finalPath = directoryURL.URLByAppendingPathComponent(pathComponent!) 
      println(finalPath) 
      //remove the file if it exists 
      if fileManager.fileExistsAtPath(finalPath!.absoluteString!) { 
       println("file exists on disk, removing..") 
       fileManager.removeItemAtPath(finalPath!.absoluteString!, error: nil) 
      } 
      return finalPath! 
     } 

     return temporaryURL 
    } 
    .validate() 

    .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in 
     let progress = (Double(totalBytesRead)/Double(totalBytesExpectedToRead)) * 100 
     println(String(format: "%.2f", progress)) 
    } 

    .response { request, response, data, error in 
      println(request) 
      println(response) 

     if let mediaData = data { 
      println("saving file to disk") 
      mediaData.writeToURL(finalPath!, atomically: true) 
     } 
    } 

Обычно я использовал бы пример, представленный в документах, но он не работает, если файл уже существует. то есть:

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

Итак, как я могу загрузить файл, перезаписать его, если он существует, и записать путь, файл записывается в моей базе данных CoreData?

ответ

2

Сначала вам необходимо удалить файл. Alamofire только пытается переместить файл из временного местоположения в конечное местоположение, которое вы предоставили в закрытии destination.

0

Вы можете создать расширение на Alamofire.DownloadRequest, чтобы указать, как загрузить файл, где вы можете использовать опцию DownloadRequest.DownloadOptions.removePreviousFile.

Подробнее о том, как это сделать, см. Мой ответ на вопрос this.

Смежные вопросы