[英]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.