swift的代码教程-ios7 网络类(VKHttpManager)
来源:互联网 发布:linux看b站 编辑:程序博客网 时间:2024/04/29 06:20
看了很多帖子讲述 NSURLSession,没有一个讲得很清楚,自己琢磨测试,封了下一个类,测试可用,直接上码!学习勿喷。
import Foundationimport UIkitlet BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy" //标识符var downloadList:NSMutableArray! = NSMutableArray()var uploadList:NSMutableArray! = NSMutableArray()class Download{ var downSession:NSURLSession! var downRequest:NSURLRequest! var downTask:NSURLSessionDownloadTask! var saveName:String! var isDowning:Bool! var callBack: ((NSURL!, NSURLResponse!, NSError!) -> Void)! var progressFunc:((Float!)->Void)! }class Upload{ var upSession:NSURLSession! var upRequest:NSMutableURLRequest! var upTask:NSURLSessionUploadTask! var callBack:((NSData!, NSURLResponse!, NSError!) -> Void)! var progressFunc:((Float!)->Void)!}class HttpData{ var httpDataSession:NSURLSession! var httpDataRequest:NSMutableURLRequest! var httpDataTask:NSURLSessionDataTask! var callBack:((NSData!, NSURLResponse!, NSError!) -> Void)!}class VKHttpManager:NSObject,NSURLSessionDelegate{ class var manager:VKHttpManager{ return VKHttpManager() } class func initDown(URL downUrl:String!,saveName:String!,progressFunc:((Float!)->Void)!,backFunc: ((NSURL!, NSURLResponse!, NSError!) -> Void)!)->Download{ var down:Download = Download() down.downSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate:manager,delegateQueue:nil) down.downRequest = NSURLRequest(URL: NSURL(string:downUrl)) downloadList.addObject(down) down.downTask = down.downSession.downloadTaskWithRequest(down.downRequest,completionHandler:backFunc) down.callBack = backFunc down.saveName = saveName down.progressFunc = progressFunc return down } class func startDownload(down:Download!){ down.isDowning = true down.downTask.resume() } class func cancleDownload(down:Download!){ down.isDowning = false down.downTask.cancel() } class func initUp(upUrl:String!,fileParam:String!,filePath:String!,keyArry:NSArray!,valueArry:NSArray!,progressFunc:((Float!)->Void)!,backFuc:((NSData!, NSURLResponse!, NSError!) -> Void)!)->Upload{ var up = Upload() up.upSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate:manager,delegateQueue:NSOperationQueue.mainQueue()) up.upRequest = NSMutableURLRequest(URL: NSURL(string:upUrl.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding))) up.upRequest.HTTPMethod = "POST" var contentType = "multipart/form-data; boundary="+BOUNDARY up.upRequest.setValue(contentType, forHTTPHeaderField: "Content-Type") var body = NSMutableData.data() var fileData = NSData(contentsOfFile:filePath) if keyArry != nil && valueArry != nil && valueArry.count > 0 && keyArry.count > 0{ for var i=0; i < keyArry.count; ++i{ body.appendData(String("--"+BOUNDARY+"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) body.appendData(String("Content-Disposition: form-data; name=\""+String(keyArry.objectAtIndex(i) as String)+"\"\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) body.appendData((String(valueArry.objectAtIndex(i) as String)+"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) } } if fileData != nil { body.appendData(String("--"+BOUNDARY+"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) body.appendData(String("Content-Disposition: form-data; name=\""+fileParam+"\"; filename=\""+filePath.lastPathComponent+"\"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) body.appendData(String("Content-Type: application/zip\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) body.appendData(fileData) body.appendData(String("\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)) } body.appendData(String("--"+BOUNDARY+"--\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)); up.upTask = up.upSession.uploadTaskWithRequest(up.upRequest, fromData:body,completionHandler:backFuc) up.progressFunc = progressFunc up.callBack = backFuc uploadList.addObject(up) return up } class func startUpload(var up:Upload!){ up.upTask.resume() } class func cancleUpload(var up:Upload!){ up.upTask.cancel() } class func initHttpData(httpDataUrl:String!,keyArry:NSArray!,valueArry:NSArray!,backFuc:((NSData!, NSURLResponse!, NSError!) -> Void)!)->HttpData{ var httpData = HttpData() httpData.httpDataSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate:manager,delegateQueue:nil) httpData.httpDataRequest = NSMutableURLRequest(URL: NSURL(string:httpDataUrl.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding))) httpData.httpDataRequest.HTTPMethod = "POST" var params:String="" if keyArry != nil && valueArry != nil && valueArry.count > 0 && keyArry.count > 0{ for var i=0; i < keyArry.count; ++i{ if i == 0 { params = String(keyArry.objectAtIndex(i) as String)+"="+String(valueArry.objectAtIndex(i) as String) }else { params = params+"&"+String(keyArry.objectAtIndex(i) as String)+"="+String(valueArry.objectAtIndex(i) as String) } } } httpData.httpDataRequest.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) httpData.httpDataTask = httpData.httpDataSession.dataTaskWithRequest(httpData.httpDataRequest,completionHandler:backFuc) httpData.callBack = backFuc return httpData } class func startHttpData(var httpData:HttpData){ httpData.httpDataTask.resume() } class func cancleHttpData(var httpData:HttpData){ httpData.httpDataTask.cancel() } // 回调 反馈 func URLSession(session: NSURLSession!, downloadTask: NSURLSessionDownloadTask!, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64){ var progress = Float(Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)); for var i=0; i<downloadList.count; ++i{ var d = downloadList[i] as Download d.progressFunc(progress) } } func URLSession(session: NSURLSession!, downloadTask: NSURLSessionDownloadTask!, didFinishDownloadingToURL location: NSURL!){ println("Finish") // 下载完成 var defaultFileMag:NSFileManager! = NSFileManager.defaultManager() for var i = 0 ; i<downloadList.count; ++i{ var d = downloadList[i] as Download if d.downSession == session { var destinationPath = NSURL(fileURLWithPath:String(FileOp.getDocumentPath()+"/"+d.saveName)) defaultFileMag.removeItemAtURL(destinationPath,error:nil); var copyFile:Bool = defaultFileMag.copyItemAtURL(location,toURL:destinationPath,error:nil) if copyFile == false { println("copyItemAtURL error") return } downloadList.removeObjectAtIndex(i) } } } func URLSession(session: NSURLSession!, task: NSURLSessionTask!, didCompleteWithError error: NSError!){ for var i = 0 ; i<downloadList.count; ++i{ var d = downloadList[i] as Download if d.downSession == session { downloadList.removeObjectAtIndex(i) } } for var i = 0 ; i<uploadList.count; ++i{ var d = uploadList[i] as Upload if d.upSession == session { uploadList.removeObjectAtIndex(i) } } println("alwaysFinish") // 不管下载错误和正确 println(error) } func URLSession(session: NSURLSession!, task: NSURLSessionTask!, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64){ var progress = Float(Float(totalBytesSent)/Float(totalBytesExpectedToSend)); for var i=0; i<uploadList.count; ++i{ var u = uploadList[i] as Upload u.progressFunc(progress) } } }
这里补充下调用方法,可能有些初学者看的不是很懂
var up = VKHttpManager.initUp("http://192.168.1.107/myphp/index/upload/",fileParam:"file",filePath:NSBundle.mainBundle().pathForResource("11", ofType: "mp3"),keyArry:nil,valueArry:nil,progressFunc:prog,backFuc:{ data,response,error in println(NSString(data: data,encoding:NSUTF8StringEncoding)) }) VKHttpManager.startUpload(up)
func prog(p:Float!)->Void{ println(p) }
var down = VKHttpManager.initDown(URL:"http://192.168.1.107/myphp/2222.mp3",saveName:"12.jpg",progressFunc:prog,backFunc:nil) VKHttpManager.startDownload(down)
0 0
- swift的代码教程-ios7 网络类(VKHttpManager)
- swift的代码教程-ios7 网络类(VKHttpManager)
- swift的代码教程-ios文件管理类(FileOp)
- swift的代码教程-ios简单动画类(Animator)
- swift的代码教程-ios简单声音类(SoundOp)
- swift的代码教程-ios警告框类(VKAlert)
- SWIFT的代码教程-json类(VKJson)
- swift的代码教程-ios文件管理类(FileOp)
- swift的代码教程-ios简单动画类(Animator)
- swift的代码教程-ios简单声音类(SoundOp)
- swift的代码教程-ios警告框类(VKAlert)
- SWIFT的代码教程-json类(VKJson)
- ios7 by tutorials 最棒的ios7教程
- Swift的JFNetworkTool网络请求工具类
- Swift开发教程--Swift的基本语法
- Swift读写plist文件教程及代码
- ios7下给应用评分的代码
- Swift中文教程的网址
- 怎样调用一个由char * 指针指向函数名的函数?
- 容器嵌套的示例
- 初识算法
- 自定义UINavigationBar
- BaseAction的创建及List、Map、数组转化为JSON格式
- swift的代码教程-ios7 网络类(VKHttpManager)
- Ajax之基础
- android Fragments详解一:概述
- MAC 更新SVN到1.8
- debian实现telnet连通
- 手机版仿微信陌陌即时通讯android安卓IOS定制源码
- HTTP range
- 怎样实现比特数组或集合?
- vs2003 编译错误 定位 错行