Tag: File path cannot err res loaddata omd usr URL download
HttpTool.h
#import<Foundation/Foundation.h>typedefvoid(^Httptoolprogressblock) (CGFloat progress); typedefvoid(^httptoolcompletionblock) (Nserror *error);@interfaceHttptool:nsobject-(void) Uploaddata: (NSData *) Data URL: (Nsurl*) URL Progressblock: (httptoolprogressblock) Progressblock completion: (httptoolcompletionblock) Completio Nblock;/** Download Data*/-(void) Downloadfromurl: (Nsurl *) URL Progressblock: (httptoolprogressblock) Progressblock completion: (httptoolcompletionblock) compl Etionblock;-(NSString *) Filesavepath: (NSString *) FileName;@end
View Code
#import "HttpTool.h"#defineKtimeout 5.0@interfaceHttptool () <NSURLSessionDownloadDelegate,NSURLSessionTaskDelegate>{ //DownloadHttptoolprogressblock _dowloadprogressblock; Httptoolcompletionblock _downladcompletionblock; Nsurl*_downloadurl; //UploadHttptoolprogressblock _uploadprogressblock; Httptoolcompletionblock _uploadcompletionblock;}@end@implementationHttptool#pragmaMark-Upload-(void) Uploaddata: (NSData *) Data URL: (Nsurl *) URL Progressblock: (httptoolprogressblock) Progressblock completion: (httptoolcompletionblock) completionBlock{ Nsassert (Data! = Nil,@"upload data cannot be empty"); Nsassert (URL! = Nil,@"the upload file path cannot be empty"); _uploadprogressblock=Progressblock; _uploadcompletionblock=Completionblock; Nsmutableurlrequest*request =[nsmutableurlrequest requestwithurl:url cachepolicy:nsurlrequestuseprotocolcachepolicy TimeoutInterval: Ktimeout]; Request. HttpMethod=@"PUT"; Nsurlsessionconfiguration*config =[Nsurlsessionconfiguration defaultsessionconfiguration]; //nsurlsessiondownloaddelegateNsurlsession *session = [Nsurlsession sessionwithconfiguration:configDelegate: Self Delegatequeue:[[nsoperationqueue alloc] [init]]; //Defining Download OperationsNsurlsessionuploadtask *uploadtask =[Session Uploadtaskwithrequest:request Fromdata:data]; [Uploadtask resume];}#pragmaMark-Upload Agent#pragmaMark-Upload Progress-(void) Urlsession: (Nsurlsession *) session Task: (Nsurlsessiontask *) Task Didsendbodydata: (int64_t) bytessent totalbytessent: (int64_t) totalbytessent totalbytesexpectedtosend: ( int64_t) totalbytesexpectedtosend{if(_uploadprogressblock) {cgfloat Progress= (cgfloat) totalbytessent/Totalbytesexpectedtosend; _uploadprogressblock (progress); }}#pragmaMark-Upload Complete-(void) Urlsession: (Nsurlsession *) session Task: (Nsurlsessiontask *) Task Didcompletewitherror: (Nserror *) error{if(_uploadcompletionblock) {_uploadcompletionblock (error); _uploadprogressblock=Nil; _uploadcompletionblock=Nil; }}#pragmaMark-Download-(void) Downloadfromurl: (Nsurl *) URL Progressblock: (httptoolprogressblock) Progressblock completion: (httptoolcompletionblock) complet ionblock{nsassert (URL! = Nil,@"Download URL cannot be passed empty"); _downloadurl=URL; _dowloadprogressblock=Progressblock; _downladcompletionblock=Completionblock; Nsurlrequest*request =[nsurlrequest requestwithurl:url cachepolicy:nsurlrequestuseprotocolcachepolicy TimeoutInterval:kTimeOut]; //session Most use a single case toNsurlresponse*response =Nil; //Advanced Sync Request[Nsurlconnection sendsynchronousrequest:request returningresponse:&response Error:nil]; //NSLog (@ "%lld", response.expectedcontentlength); if(Response.expectedcontentlength <=0) { if(_downladcompletionblock) {Nserror*error =[nserror Errorwithdomain:@"file does not exist"Code404Userinfo:nil]; _downladcompletionblock (Error); //Clear Block_downladcompletionblock =Nil; _dowloadprogressblock=Nil; } return; } nsurlsessionconfiguration*config =[Nsurlsessionconfiguration defaultsessionconfiguration]; //nsurlsessiondownloaddelegateNsurlsession *session = [Nsurlsession sessionwithconfiguration:configDelegate: Self Delegatequeue:[[nsoperationqueue alloc] [init]]; //Defining Download OperationsNsurlsessiondownloadtask *downloadtask =[Session downloadtaskwithrequest:request]; [Downloadtask resume];}#pragmaMark-nsurlsessiondownloaddelegate#pragmaMark Download Complete-(void) Urlsession: (Nsurlsession *) session Downloadtask: (Nsurlsessiondownloadtask *) downloadtask Didfinishdownloadingtourl: (Nsurl *) location{//The picture is saved under the doucument of the sandbox.NSString *filesavepath =[self filesavepath:[_downloadurl lastpathcomponent]]; //File ManagementNsfilemanager *filemanager =[Nsfilemanager Defaultmanager]; [FileManager copyitematurl:location Tourl:[nsurl Fileurlwithpath:filesavepath] error:nil]; if(_downladcompletionblock) {//notification Download successful, no error_downladcompletionblock (nil); //Empty Block_downladcompletionblock =Nil; _dowloadprogressblock=Nil; }}#pragmaMark Download Progress-(void) Urlsession: (Nsurlsession *) session Downloadtask: (Nsurlsessiondownloadtask *) Downloadtask Didwritedata: (int64_t) Byteswritten Totalbyteswritten: (int64_t) Totalbyteswritten Totalbytesexpectedtowrite: (int64_t) totalbytesexpectedtowrite{if(_dowloadprogressblock) {//The number of bytes written, divided by the total number of bytes, is the download progressCGFloat progress = (cgfloat) Totalbyteswritten/Totalbytesexpectedtowrite; _dowloadprogressblock (progress); }}-(void) Urlsession: (Nsurlsession *) session Downloadtask: (Nsurlsessiondownloadtask *) Downloadtask Didresumeatoffset: (int64_t) Fileoffset expectedtotalbytes: (int64_t) expectedtotalbytes{}#pragmaMark-Passes a filename and returns a file path under the sandbox document-(NSString *) Filesavepath: (NSString *) filename{NSString*document = Nssearchpathfordirectoriesindomains (NSDocumentDirectory, Nsuserdomainmask, YES) [0]; //The picture is saved under the doucument of the sandbox. return[Document Stringbyappendingpathcomponent:filename];}@end
View Code
IOS http (upload and download)