2017-01-10 2 views
0

스위프트 3에서 파일을 다운로드 할 때이 guide을 사용하고 있습니다. 특정 개수의 파일을 다운로드 할 수 있도록 루프를 추가하여 조작하려고했습니다. 작동하지만 최대 24 kb까지만 완료됩니다.신속한 3 파일 다운로드는 최대 24kb 만 완료합니까? URLSession 사용

for jsonDict in data{ 
    var jasonData = Attachment() 

    if let data = (jsonDict["url"] as? String) {jasonData.url = data} else { jasonData.url = ""} 

    self.beginDownloadFile(jasonData: jasonData) 
} 

func beginDownloadFile(jasonData: Attachment){ 
     let identifier = jasonData.customer_id + "/attachment/" + jasonData.patient_guid + "@%E%@" + "/" + jasonData.filename + "@%E%@" + jasonData.customer_id + "@%E%@" + jasonData.patient_guid 

     let backgroundSessionConfiguration = URLSessionConfiguration.background(withIdentifier: identifier) 

     backgroundSession = Foundation.URLSession(configuration: backgroundSessionConfiguration, delegate: self, delegateQueue: OperationQueue.main) 

     var link = self.constants.PATIENTS_PICTURE_LINK + jasonData.customer_id + "/attachment/" + jasonData.guid + "/" + jasonData.filename 
     link = link.replacingOccurrences(of: " ", with: "%20") 

     let url = URL(string: link)! 

     downloadTask = backgroundSession.downloadTask(with: url) 
     downloadTask.resume() 
    } 

    func urlSession(_ session: URLSession, 
        downloadTask: URLSessionDownloadTask, 
        didFinishDownloadingTo location: URL){ 
     let string_container = session.configuration.identifier!.components(separatedBy: "@%E%@") 

     let folderPath = string_container[0] 
     let fileName = string_container[1] 
     let customerID = string_container[2] 
     let patientGUID = string_container[3] 

     print("GUID IS: " + patientGUID) 

     let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) 
     let documentDirectoryPath:String = path[0] 

     let fileManager = FileManager() 

     let path1 = documentDirectoryPath.stringByAppendingPathComponent(pathComponent: customerID) 
     let path2 = path1.stringByAppendingPathComponent(pathComponent: "attachment") 
     let path3 = path2.stringByAppendingPathComponent(pathComponent: patientGUID) 

     let destinationURLForFile = URL(fileURLWithPath: path3.appendingFormat(fileName)) 

     do { 
      if !fileManager.fileExists(atPath: path1) { 
       try fileManager.createDirectory(atPath: path1, withIntermediateDirectories: false, attributes: nil) 
      } 
      if !fileManager.fileExists(atPath: path2) { 
       try fileManager.createDirectory(atPath: path2, withIntermediateDirectories: false, attributes: nil) 
      } 

      if !fileManager.fileExists(atPath: path3) { 
       try fileManager.createDirectory(atPath: path3, withIntermediateDirectories: false, attributes: nil) 
      } 

     } catch let error as NSError { 
      print("ATTACHMENT ERROR: " + error.localizedDescription); 
     } 

     if fileManager.fileExists(atPath: destinationURLForFile.path){ 
      //showFileWithPath(path: destinationURLForFile.path) 
      do { 
       try fileManager.removeItem(at: destinationURLForFile) 
       try fileManager.moveItem(at: location, to: destinationURLForFile) 
       //showFileWithPath(path: destinationURLForFile.path) 
      }catch{ 
       print("An error occurred while moving/deleting file to destination url") 
      } 
     } 
     else{ 
      do { 
       try fileManager.moveItem(at: location, to: destinationURLForFile) 
       //showFileWithPath(path: destinationURLForFile.path) 
      }catch{ 
       print("An error occurred while moving file to destination url") 
      } 
     } 
    } 

이 결과는 :

Sample Screenshot

이 24킬로바이트 @ 무엇을 중지하는 원인

여기 내 코드입니까? 루프 때문인가요? 또는 식별자 조작?

답변

0

여기서 downloadTask을 선언하는 코드는 무엇입니까? 그것은 인스턴스 속성입니까?

그렇다면, 당신은 루프가 실행 downloadTask에 때마다 포인터를 멀리 던지고,이 코드는 달렸다을 가져옵니다

downloadTask = backgroundSession.downloadTask(with: url) downloadTask.resume()

당신의 작업이이 때문에 초기에 출시되는 것이 가능하다 . 이 경우 다운로드가 완료되어야 루프를 통해 마지막 시간이 소요됩니다.

또한 24KB가 올바른 파일 크기 일 수 있습니까? 또는 정적 오류 페이지의 크기일까요?

+0

세션은 작업을 유지합니다. 그러나 제한된 Swift 지식이 여기서 일어나는 것을 잘못 해석하지 않는다고 가정 할 때 문제는 코드가 ** 세션 **을 유지하지 못한다는 것입니다. – dgatwood

+0

안녕하세요! 늦게 회신 해 주셔서 죄송합니다. 일찍 코딩을 다시 시작했습니다. 오류 페이지 인 것으로 보입니다. 나는 내 링크를 재검토했는데 guid 링크 부분에 문제가있는 것으로 보였다. 그것이 작동하고 있지만, 나는 urlsession 바로하고 있니? urlsession 식별자로 파일 경로를 만드는 데 필요한 데이터를 저장하고 있습니다. – iOSNewbie