簡體   English   中英

將圖像/視頻上傳到FTP Swift 3.0

[英]Upload Image/Video to FTP Swift 3.0

我正在使用以下代碼將圖像/視頻上傳到FTP。 完整的圖片未上傳。 圖像的Lowe部分被剪切。 在上傳過程結束時,據說完整的數據已上傳,但是圖像已被剪切。 我可以上傳小圖像和視頻。 問題是大圖像和視頻。 請讓我知道我需要在以下代碼中進行的更改。

    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)

嘗試使用LxFTPRequest Framework將文件上傳到FTP服務器

本地保存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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM