2017-11-15 38 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() 
関連する問題