swift的代码教程-ios7 网络类(VKHttpManager)

看了很多帖子讲述 NSURLSession,没有一个讲得很清楚,自己琢磨测试,封了下一个类,测试可用,直接上码!学习勿喷。

  1. import Foundation  
  2. import UIkit  
  3. let BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy" //标识符  
  4.   
  5. var downloadList:NSMutableArray! = NSMutableArray()  
  6. var uploadList:NSMutableArray! = NSMutableArray()  
  7.   
  8. class Download{  
  9.     var downSession:NSURLSession!  
  10.     var downRequest:NSURLRequest!  
  11.     var downTask:NSURLSessionDownloadTask!  
  12.     var saveName:String!  
  13.     var isDowning:Bool!  
  14.     var callBack: ((NSURL!, NSURLResponse!, NSError!) -> Void)!  
  15.     var progressFunc:((Float!)->Void)!  
  16.       
  17. }  
  18.   
  19. class Upload{  
  20.     var upSession:NSURLSession!  
  21.     var upRequest:NSMutableURLRequest!  
  22.     var upTask:NSURLSessionUploadTask!  
  23.     var callBack:((NSData!, NSURLResponse!, NSError!) -> Void)!  
  24.     var progressFunc:((Float!)->Void)!  
  25. }  
  26.   
  27. class HttpData{  
  28.     var httpDataSession:NSURLSession!  
  29.     var httpDataRequest:NSMutableURLRequest!  
  30.     var httpDataTask:NSURLSessionDataTask!  
  31.     var callBack:((NSData!, NSURLResponse!, NSError!) -> Void)!  
  32. }  
  33.   
  34. class VKHttpManager:NSObject,NSURLSessionDelegate{  
  35.       
  36.     class var manager:VKHttpManager{  
  37.             return VKHttpManager()  
  38.     }  
  39.     
  40.     class func initDown(URL downUrl:String!,saveName:String!,progressFunc:((Float!)->Void)!,backFunc: ((NSURL!, NSURLResponse!, NSError!) -> Void)!)->Download{  
  41.         var down:Download = Download()  
  42.         down.downSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate:manager,delegateQueue:nil)  
  43.         down.downRequest = NSURLRequest(URL: NSURL(string:downUrl))  
  44.         downloadList.addObject(down)  
  45.         down.downTask = down.downSession.downloadTaskWithRequest(down.downRequest,completionHandler:backFunc)  
  46.         down.callBack = backFunc  
  47.         down.saveName = saveName  
  48.         down.progressFunc = progressFunc  
  49.         return down  
  50.     }  
  51.       
  52.     class func startDownload(down:Download!){  
  53.         down.isDowning = true  
  54.         down.downTask.resume()  
  55.     }  
  56.       
  57.     class func cancleDownload(down:Download!){  
  58.         down.isDowning = false  
  59.         down.downTask.cancel()  
  60.     }  
  61.       
  62.     class func initUp(upUrl:String!,fileParam:String!,filePath:String!,keyArry:NSArray!,valueArry:NSArray!,progressFunc:((Float!)->Void)!,backFuc:((NSData!, NSURLResponse!, NSError!) -> Void)!)->Upload{  
  63.         var up = Upload()  
  64.         up.upSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate:manager,delegateQueue:NSOperationQueue.mainQueue())  
  65.         up.upRequest = NSMutableURLRequest(URL: NSURL(string:upUrl.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)))  
  66.         up.upRequest.HTTPMethod = "POST"  
  67.           
  68.         var contentType = "multipart/form-data; boundary="+BOUNDARY  
  69.         up.upRequest.setValue(contentType, forHTTPHeaderField: "Content-Type")  
  70.           
  71.         var body = NSMutableData.data()  
  72.         var fileData = NSData(contentsOfFile:filePath)  
  73.           
  74.         if keyArry != nil && valueArry != nil && valueArry.count > 0 && keyArry.count > 0{  
  75.             for var i=0; i < keyArry.count; ++i{  
  76.                 body.appendData(String("--"+BOUNDARY+"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  77.                 body.appendData(String("Content-Disposition: form-data; name=\""+String(keyArry.objectAtIndex(i) as String)+"\"\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  78.                 body.appendData((String(valueArry.objectAtIndex(i) as String)+"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  79.             }  
  80.         }  
  81.           
  82.         if fileData != nil {  
  83.             body.appendData(String("--"+BOUNDARY+"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  84.             body.appendData(String("Content-Disposition: form-data; name=\""+fileParam+"\"; filename=\""+filePath.lastPathComponent+"\"\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  85.             body.appendData(String("Content-Type: application/zip\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  86.             body.appendData(fileData)  
  87.             body.appendData(String("\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true))  
  88.         }  
  89.         body.appendData(String("--"+BOUNDARY+"--\r\n").dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true));  
  90.           
  91.         up.upTask = up.upSession.uploadTaskWithRequest(up.upRequest, fromData:body,completionHandler:backFuc)  
  92.         up.progressFunc = progressFunc  
  93.         up.callBack = backFuc  
  94.         uploadList.addObject(up)  
  95.         return up  
  96.     }  
  97.       
  98.     class func startUpload(var up:Upload!){  
  99.         up.upTask.resume()  
  100.     }  
  101.       
  102.     class func cancleUpload(var up:Upload!){  
  103.         up.upTask.cancel()  
  104.     }  
  105.       
  106.     class func initHttpData(httpDataUrl:String!,keyArry:NSArray!,valueArry:NSArray!,backFuc:((NSData!, NSURLResponse!, NSError!) -> Void)!)->HttpData{  
  107.         var httpData = HttpData()  
  108.         httpData.httpDataSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),delegate:manager,delegateQueue:nil)  
  109.         httpData.httpDataRequest = NSMutableURLRequest(URL: NSURL(string:httpDataUrl.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)))  
  110.         httpData.httpDataRequest.HTTPMethod = "POST"  
  111.         var params:String=""  
  112.         if keyArry != nil && valueArry != nil && valueArry.count > 0 && keyArry.count > 0{  
  113.             for var i=0; i < keyArry.count; ++i{  
  114.                 if i == 0 {  
  115.                     params = String(keyArry.objectAtIndex(i) as String)+"="+String(valueArry.objectAtIndex(i) as String)  
  116.                 }else {  
  117.                     params = params+"&"+String(keyArry.objectAtIndex(i) as String)+"="+String(valueArry.objectAtIndex(i) as String)  
  118.                 }  
  119.             }  
  120.         }  
  121.         httpData.httpDataRequest.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)  
  122.         httpData.httpDataTask = httpData.httpDataSession.dataTaskWithRequest(httpData.httpDataRequest,completionHandler:backFuc)  
  123.         httpData.callBack = backFuc  
  124.         return httpData  
  125.     }  
  126.       
  127.     class func startHttpData(var httpData:HttpData){  
  128.         httpData.httpDataTask.resume()  
  129.     }  
  130.       
  131.     class func cancleHttpData(var httpData:HttpData){  
  132.         httpData.httpDataTask.cancel()  
  133.     }  
  134.       
  135.       
  136.   
  137. //    回调 反馈  
  138.     func URLSession(session: NSURLSession!, downloadTask: NSURLSessionDownloadTask!, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64){  
  139.         var progress = Float(Float(totalBytesWritten)/Float(totalBytesExpectedToWrite));  
  140.         for var i=0; i<downloadList.count; ++i{  
  141.             var d =  downloadList[i] as Download  
  142.             d.progressFunc(progress)  
  143.         }  
  144.     }  
  145.       
  146.     func URLSession(session: NSURLSession!, downloadTask: NSURLSessionDownloadTask!, didFinishDownloadingToURL location: NSURL!){  
  147.         println("Finish"// 下载完成  
  148.         var defaultFileMag:NSFileManager! = NSFileManager.defaultManager()  
  149.         for var i = 0 ; i<downloadList.count; ++i{  
  150.             var d =  downloadList[i] as Download  
  151.             if d.downSession == session {  
  152.                 var destinationPath = NSURL(fileURLWithPath:String(FileOp.getDocumentPath()+"/"+d.saveName))  
  153.                 defaultFileMag.removeItemAtURL(destinationPath,error:nil);  
  154.                 var copyFile:Bool = defaultFileMag.copyItemAtURL(location,toURL:destinationPath,error:nil)  
  155.                 if copyFile == false {  
  156.                     println("copyItemAtURL error")  
  157.                     return  
  158.                 }  
  159.                 downloadList.removeObjectAtIndex(i)  
  160.             }  
  161.         }  
  162.     }  
  163.       
  164.     func URLSession(session: NSURLSession!, task: NSURLSessionTask!, didCompleteWithError error: NSError!){  
  165.         for var i = 0 ; i<downloadList.count; ++i{  
  166.             var d =  downloadList[i] as Download  
  167.             if d.downSession == session {  
  168.                 downloadList.removeObjectAtIndex(i)  
  169.             }  
  170.         }  
  171.           
  172.         for var i = 0 ; i<uploadList.count; ++i{  
  173.             var d =  uploadList[i] as Upload  
  174.             if d.upSession == session {  
  175.                 uploadList.removeObjectAtIndex(i)  
  176.             }  
  177.         }  
  178.         println("alwaysFinish"// 不管下载错误和正确  
  179.         println(error)  
  180.     }  
  181.   
  182.     func URLSession(session: NSURLSession!, task: NSURLSessionTask!, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64){  
  183.         var progress = Float(Float(totalBytesSent)/Float(totalBytesExpectedToSend));  
  184.         for var i=0; i<uploadList.count; ++i{  
  185.             var u =  uploadList[i] as Upload  
  186.             u.progressFunc(progress)  
  187.         }  
  188.     }  
  189.       
  190.       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值