2017-11-15 2 views
0

아래 코드를 사용하여 FTP에 이미지/비디오를 업로드하고 있습니다. 전체 이미지가 업로드되지 않습니다. 이미지의 로우 부분이 잘려나 간다. 업로드 프로세스가 끝나면 전체 데이터가 업로드되지만 이미지는 잘린 상태라고합니다. 작은 이미지와 비디오를 업로드 할 수 있습니다. 문제는 큰 이미지와 동영상입니다. 아래 코드에서 수행해야 할 변경 사항을 알려 주시기 바랍니다.FTP Swift 3.0에 이미지/비디오 업로드

let buf  = movieData?.bytes.assumingMemoryBound(to: UInt8.self) 
    let buf2 = movieData?.bytes.assumingMemoryBound(to: UInt8.self) 
    let buf3 = UnsafeMutablePointer<UInt8>.allocate(capacity: (movieData?.length)!) 

    var leftOverSize  = movieData?.length 
    let bytesFile   = movieData?.length 
    var totalBytesWritten = 0 
    var bytesWritten  = 0 


    let ftpUrl = NSURL(string: "FTP_URL") 
    let stream  = CFWriteStreamCreateWithFTPURL(nil,ftpUrl!).takeUnretainedValue() 
    let cfstatus = CFWriteStreamOpen(stream) as Bool 
    // connection fail 
    if !cfstatus { 
     print("Not connected") 
    } 

    repeat{ 
     // Write the data to the write stream 
     bytesWritten = CFWriteStreamWrite(stream, buf, leftOverSize!) 
     print("bytesWritten: \(bytesWritten)") 
     if (bytesWritten > 0) { 
      totalBytesWritten += bytesWritten 
      // Store leftover data until kCFStreamEventCanAcceptBytes event occurs again 
      if (bytesWritten < bytesFile!) { 
       leftOverSize = bytesFile! - totalBytesWritten 
       memmove(buf3, buf2! + bytesWritten, leftOverSize!) 
      }else{ 
       leftOverSize = 0 
      } 

     }else{ 
      print("CFWriteStreamWrite returned \(bytesWritten)") 
      break 
     } 

     if !CFWriteStreamCanAcceptBytes(stream){ 
      sleep(1) 
     } 
    }while((totalBytesWritten < bytesFile!)) 

    CFWriteStreamClose(stream) 

답변

0

가 FTP 서버에 파일을 업로드하는 LxFTPRequest 프레임 워크를 시도

저장 Data 로컬

extension Data { 

    func save(withName name: String) -> String{ 
     let fileManager = FileManager.default 
     let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(name) 
     print(paths) 
     fileManager.createFile(atPath: paths as String, contents: self, attributes: nil) 
     return paths 
    } 
} 

FTP 요청

guard let data = UIImageJPEGRepresentation(image, 0.5) else { 
     return 
    } 

    let filePath = data.save(withName: yourfileName) 
    let uploadUrl = URL(string: ftpBaseUrl + imageName) 

    request = LxFTPRequest.upload() 
    request.serverURL = uploadUrl 
    request.localFileURL = URL(fileURLWithPath: filePath) 
    request.username = username 
    request.password = password 

    request.successAction = { (resultClass, result) in 
     // success ... 
    } 

    request.failAction = { (domain, error, errorMessage) in 
     //Fail .... 
    } 

    request.progressAction = {(_ totalSize: Int, _ finishedSize: Int, _ finishedPercent: CGFloat) -> Void in 

    } 

    request.start()