Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class FTPImageUpload {
- private let ftpBaseUrl: String
- private let directoryPath: String
- private let username: String
- private let password: String
- private func setFtpUserName(for ftpWriteStream: CFWriteStream, userName: String) {
- CFWriteStreamSetProperty(ftpWriteStream, CFStreamPropertyKey(rawValue: kCFStreamPropertyFTPUserName), userName as CFString)
- }
- private func setFtpPassword(for ftpWriteStream: CFWriteStream, password: String) {
- CFWriteStreamSetProperty(ftpWriteStream, CFStreamPropertyKey(rawValue: kCFStreamPropertyFTPPassword), password as CFString)
- }
- private func ftpWriteStream(forFileName fileName: String) -> CFWriteStream? {
- let fullyQualifiedPath = "ftp://\(ftpBaseUrl)/\(directoryPath)/\(fileName)" as CFString
- guard let ftpUrl = CFURLCreateWithString(kCFAllocatorDefault, fullyQualifiedPath, nil) else { return nil }
- let ftpStream = CFWriteStreamCreateWithFTPURL(kCFAllocatorDefault, ftpUrl)
- let ftpWriteStream = ftpStream.takeRetainedValue()
- setFtpUserName(for: ftpWriteStream, userName: ftpUserName)
- setFtpPassword(for: ftpWriteStream, password: ftpPassword)
- return ftpWriteStream
- }
- init(baseUrl: String, userName: String, password: String, directoryPath: String) {
- self.ftpBaseUrl = baseUrl
- self.username = ftpUserName
- self.password = password
- self.directoryPath = directoryPath
- }
- func send(image: NSImage, with fileName: String) -> Bool {
- guard let ftpWriteStream = ftpWriteStream(forFileName: fileName) else { return false }
- if CFWriteStreamOpen(ftpWriteStream) == false {
- print("Could not open stream")
- return false
- }
- let bufferSize = 1024 * 10
- let swpBufferSize = 24
- var buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufferSize)
- var swpBuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: swpBufferSize)
- var bytesRemaining = swpBufferSize
- buffer.advanced(by: <#T##Int#>)
- repeat {
- let bytesWritten = CFWriteStreamWrite(ftpWriteStream, buffer, bufferSize)
- if bytesWritten > 0 {
- let biggie = bytesWritten.littleEndian
- print("Big endian bytes written value: \(biggie)")
- bytesRemaining -= biggie
- }
- if bytesWritten < 0 {
- print("ERROR ERROR ERROR")
- break
- }
- if bytesWritten == 0 {
- print("Completed!!")
- break
- }
- } while CFWriteStreamCanAcceptBytes(ftpWriteStream)
- CFWriteStreamClose(ftpWriteStream)
- return true
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement