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
原创粉丝点击