2017-11-15 2 views
0

Ich benutze den folgenden Code, um Bild/Video auf FTP hochzuladen. Das komplette Bild wird nicht hochgeladen. Lowe Teil des Bildes wird geschnitten. Am Ende des Upload-Prozesses werden die vollständigen Daten hochgeladen, aber das Bild wird geschnitten. Ich kann kleine Bilder und Videos hochladen. Das Problem betrifft große Bilder und Videos. Bitte lassen Sie mich wissen, welche Änderungen ich im folgenden Code vornehmen muss.Bild/Video auf FTP hochladen 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) 

Antwort

0

LxFTPRequest Rahmen versuchen, eine Datei auf FTP-Server Data lokal

speichern

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 Anfrage

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() 
hochladen