如何将照片上传到带有iPhone的服务器上?

如何将照片上传到带有iPhone的服务器上?

我正在编写一个iPhone应用程序,它可以拍照,然后上传到服务器上。如何使用Cocoa将照片上传到服务器?我想我应该在某个地方使用NSUrl。

谢谢!


皈依舞
浏览 631回答 3
3回答

蛊毒传说

标题:@interface&nbsp;EPUploader&nbsp;:&nbsp;NSObject&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSURL&nbsp;*serverURL; &nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*filePath; &nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;delegate; &nbsp;&nbsp;&nbsp;&nbsp;SEL&nbsp;doneSelector; &nbsp;&nbsp;&nbsp;&nbsp;SEL&nbsp;errorSelector; &nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;uploadDidSucceed;}-&nbsp;&nbsp;&nbsp;(id)initWithURL:&nbsp;(NSURL&nbsp;*)serverURL&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filePath:&nbsp;(NSString&nbsp;*)filePath&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate:&nbsp;(id)delegate&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doneSelector:&nbsp;(SEL)doneSelector&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorSelector:&nbsp;(SEL)errorSelector;-&nbsp;&nbsp;&nbsp;(NSString&nbsp;*)filePath;@end主要:#import&nbsp;"EPUploader.h"#import&nbsp;<zlib.h>static&nbsp;NSString&nbsp;*&nbsp;const&nbsp;BOUNDRY&nbsp;=&nbsp;@"0xKhTmLbOuNdArY";static&nbsp;NSString&nbsp;*&nbsp;const&nbsp;FORM_FLE_INPUT&nbsp;=&nbsp;@ "uploaded";#define&nbsp;ASSERT(x)&nbsp;NSAssert(x,&nbsp;@"")@interface&nbsp;EPUploader&nbsp;(Private)-&nbsp;(void)upload;-&nbsp;(NSURLRequest&nbsp;*)postRequestWithURL:&nbsp;(NSURL&nbsp;*)url &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boundry:&nbsp;(NSString&nbsp;*)boundry &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;(NSData&nbsp;*)data;-&nbsp;(NSData&nbsp;*)compress:&nbsp;(NSData&nbsp;*)data;-&nbsp;(void)uploadSucceeded:&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(BOOL)success;-&nbsp;(void)connectionDidFinishLoading:(NSURLConnection&nbsp;*)connection;@end@im &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plementation&nbsp;EPUploader/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader&nbsp;initWithURL:filePath:delegate:doneSelector:errorSelector:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initializer.&nbsp;Kicks&nbsp;off&nbsp;the&nbsp;upload.&nbsp;Note&nbsp;that&nbsp;upload&nbsp;will&nbsp;happen&nbsp;on&nbsp;a &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;separate&nbsp;thread. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;instance&nbsp;of&nbsp;Uploader. &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(id)initWithURL:&nbsp;(NSURL&nbsp;*)aServerURL&nbsp;&nbsp;&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filePath:&nbsp;(NSString&nbsp;*)aFilePath&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate:&nbsp;(id)aDelegate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doneSelector:&nbsp;(SEL)aDoneSelector&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;errorSelector:&nbsp;(SEL)anErrorSelector&nbsp;&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((self&nbsp;=&nbsp;[super&nbsp;init]))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(aServerURL); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(aFilePath); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(aDelegate); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(aDoneSelector); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(anErrorSelector); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serverURL&nbsp;=&nbsp;[aServerURL&nbsp;retain]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filePath&nbsp;=&nbsp;[aFilePath&nbsp;retain]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate&nbsp;=&nbsp;[aDelegate&nbsp;retain]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doneSelector&nbsp;=&nbsp;aDoneSelector; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorSelector&nbsp;=&nbsp;anErrorSelector; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;upload]; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self;}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader&nbsp;dealloc]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destructor. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(void)dealloc{ &nbsp;&nbsp;&nbsp;&nbsp;[serverURL&nbsp;release]; &nbsp;&nbsp;&nbsp;&nbsp;serverURL&nbsp;=&nbsp;nil; &nbsp;&nbsp;&nbsp;&nbsp;[filePath&nbsp;release]; &nbsp;&nbsp;&nbsp;&nbsp;filePath&nbsp;=&nbsp;nil; &nbsp;&nbsp;&nbsp;&nbsp;[delegate&nbsp;release]; &nbsp;&nbsp;&nbsp;&nbsp;delegate&nbsp;=&nbsp;nil; &nbsp;&nbsp;&nbsp;&nbsp;doneSelector&nbsp;=&nbsp;NULL; &nbsp;&nbsp;&nbsp;&nbsp;errorSelector&nbsp;=&nbsp;NULL; &nbsp;&nbsp;&nbsp;&nbsp;[super&nbsp;dealloc];}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader&nbsp;filePath]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets&nbsp;the&nbsp;path&nbsp;of&nbsp;the&nbsp;file&nbsp;this&nbsp;object&nbsp;is&nbsp;uploading. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path&nbsp;to&nbsp;the&nbsp;upload&nbsp;file. &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(NSString&nbsp;*)filePath{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;filePath;}@end&nbsp;//&nbsp;Uploader@implementation&nbsp;EPUploader&nbsp;(Private)/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;upload]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uploads&nbsp;the&nbsp;given&nbsp;file.&nbsp;The&nbsp;file&nbsp;is&nbsp;compressed&nbsp;before&nbsp;beign&nbsp;uploaded. &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;data&nbsp;is&nbsp;uploaded&nbsp;using&nbsp;an&nbsp;HTTP&nbsp;POST&nbsp;command. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(void)upload{ &nbsp;&nbsp;&nbsp;&nbsp;NSData&nbsp;*data&nbsp;=&nbsp;[NSData&nbsp;dataWithContentsOfFile:filePath]; &nbsp;&nbsp;&nbsp;&nbsp;ASSERT(data); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!data)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:NO]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([data&nbsp;length]&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;There's&nbsp;no&nbsp;data,&nbsp;treat&nbsp;this&nbsp;the&nbsp;same&nbsp;as&nbsp;no&nbsp;file. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:YES]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;}//&nbsp;&nbsp;NSData&nbsp;*compressedData&nbsp;=&nbsp;[self&nbsp;compress:data];//&nbsp;&nbsp;ASSERT(compressedData&nbsp;&&&nbsp;[compressedData&nbsp;length]&nbsp;!=&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;if&nbsp;(!compressedData&nbsp;||&nbsp;[compressedData&nbsp;length]&nbsp;==&nbsp;0)&nbsp;{//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:NO];//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;//&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;NSURLRequest&nbsp;*urlRequest&nbsp;=&nbsp;[self&nbsp;postRequestWithURL:serverURL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boundry:BOUNDRY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:data]; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!urlRequest)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:NO]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;NSURLConnection&nbsp;*&nbsp;connection&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;[[NSURLConnection&nbsp;alloc]&nbsp;initWithRequest:urlRequest&nbsp;delegate:self]; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!connection)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:NO]; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Now&nbsp;wait&nbsp;for&nbsp;the&nbsp;URL&nbsp;connection&nbsp;to&nbsp;call&nbsp;us&nbsp;back.}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;postRequestWithURL:boundry:data:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates&nbsp;a&nbsp;HTML&nbsp;POST&nbsp;request. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;HTML&nbsp;POST&nbsp;request. &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(NSURLRequest&nbsp;*)postRequestWithURL:&nbsp;(NSURL&nbsp;*)url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boundry:&nbsp;(NSString&nbsp;*)boundry&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;(NSData&nbsp;*)data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;from&nbsp;http://www.cocoadev.com/index.pl?HTTPFileUpload &nbsp;&nbsp;&nbsp;&nbsp;NSMutableURLRequest&nbsp;*urlRequest&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;[NSMutableURLRequest&nbsp;requestWithURL:url]; &nbsp;&nbsp;&nbsp;&nbsp;[urlRequest&nbsp;setHTTPMethod:@"POST"]; &nbsp;&nbsp;&nbsp;&nbsp;[urlRequest&nbsp;setValue: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[NSString&nbsp;stringWithFormat:@"multipart/form-data;&nbsp;boundary=%@",&nbsp;boundry] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;forHTTPHeaderField:@"Content-Type"]; &nbsp;&nbsp;&nbsp;&nbsp;NSMutableData&nbsp;*postData&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;[NSMutableData&nbsp;dataWithCapacity:[data&nbsp;length]&nbsp;+&nbsp;512]; &nbsp;&nbsp;&nbsp;&nbsp;[postData&nbsp;appendData: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[NSString&nbsp;stringWithFormat:@"--%@\r\n",&nbsp;boundry]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;[postData&nbsp;appendData: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[NSString&nbsp;stringWithFormat: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"Content-Disposition:&nbsp;form-data;&nbsp;name=\"%@\";&nbsp;filename=\"file.bin\"\r\n\r\n",&nbsp;FORM_FLE_INPUT] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;[postData&nbsp;appendData:data]; &nbsp;&nbsp;&nbsp;&nbsp;[postData&nbsp;appendData: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[NSString&nbsp;stringWithFormat:@"\r\n--%@--\r\n",&nbsp;boundry]&nbsp;dataUsingEncoding:NSUTF8StringEncoding]]; &nbsp;&nbsp;&nbsp;&nbsp;[urlRequest&nbsp;setHTTPBody:postData]; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;urlRequest;}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;compress:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uses&nbsp;zlib&nbsp;to&nbsp;compress&nbsp;the&nbsp;given&nbsp;data. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;compressed&nbsp;data&nbsp;as&nbsp;a&nbsp;NSData&nbsp;object. &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(NSData&nbsp;*)compress:&nbsp;(NSData&nbsp;*)data&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!data&nbsp;||&nbsp;[data&nbsp;length]&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;nil; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;zlib&nbsp;compress&nbsp;doc&nbsp;says&nbsp;destSize&nbsp;must&nbsp;be&nbsp;1%&nbsp;+&nbsp;12&nbsp;bytes&nbsp;greater&nbsp;than&nbsp;source. &nbsp;&nbsp;&nbsp;&nbsp;uLong&nbsp;destSize&nbsp;=&nbsp;[data&nbsp;length]&nbsp;*&nbsp;1.001&nbsp;+&nbsp;12; &nbsp;&nbsp;&nbsp;&nbsp;NSMutableData&nbsp;*destData&nbsp;=&nbsp;[NSMutableData&nbsp;dataWithLength:destSize]; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;error&nbsp;=&nbsp;compress([destData&nbsp;mutableBytes], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&destSize, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[data&nbsp;bytes], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[data&nbsp;length]); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(error&nbsp;!=&nbsp;Z_OK)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%s:&nbsp;self:0x%p,&nbsp;zlib&nbsp;error&nbsp;on&nbsp;compress:%d\n",__func__,&nbsp;self,&nbsp;error); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;nil; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[destData&nbsp;setLength:destSize]; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;destData;}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;uploadSucceeded:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used&nbsp;to&nbsp;notify&nbsp;the&nbsp;delegate&nbsp;that&nbsp;the&nbsp;upload&nbsp;did&nbsp;or&nbsp;did&nbsp;not&nbsp;succeed. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(void)uploadSucceeded:&nbsp;(BOOL)success&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;[delegate&nbsp;performSelector:success&nbsp;?&nbsp;doneSelector&nbsp;:&nbsp;errorSelector &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;withObject:self];}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;connectionDidFinishLoading:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called&nbsp;when&nbsp;the&nbsp;upload&nbsp;is&nbsp;complete.&nbsp;We&nbsp;judge&nbsp;the&nbsp;success&nbsp;of&nbsp;the&nbsp;upload &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;based&nbsp;on&nbsp;the&nbsp;reply&nbsp;we&nbsp;get&nbsp;from&nbsp;the&nbsp;server. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(void)connectionDidFinishLoading:(NSURLConnection&nbsp;*)connection&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%s:&nbsp;self:0x%p\n",&nbsp;__func__,&nbsp;self); &nbsp;&nbsp;&nbsp;&nbsp;[connection&nbsp;release]; &nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:uploadDidSucceed];}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;connection:didFailWithError:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called&nbsp;when&nbsp;the&nbsp;upload&nbsp;failed&nbsp;(probably&nbsp;due&nbsp;to&nbsp;a&nbsp;lack&nbsp;of&nbsp;network &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection). &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(void)connection:(NSURLConnection&nbsp;*)connection&nbsp;//&nbsp;IN &nbsp;&nbsp;didFailWithError:(NSError&nbsp;*)error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%s:&nbsp;self:0x%p,&nbsp;connection&nbsp;error:%s\n", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__func__,&nbsp;self,&nbsp;[[error&nbsp;description]&nbsp;UTF8String]); &nbsp;&nbsp;&nbsp;&nbsp;[connection&nbsp;release]; &nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;uploadSucceeded:NO];}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;connection:didReceiveResponse:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called&nbsp;as&nbsp;we&nbsp;get&nbsp;responses&nbsp;from&nbsp;the&nbsp;server. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection:(NSURLConnection&nbsp;*)connection&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;didReceiveResponse:(NSURLResponse&nbsp;*)response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%s:&nbsp;self:0x%p\n",&nbsp;__func__,&nbsp;self);}/* &nbsp;*----------------------------------------------------------------------------- &nbsp;* &nbsp;*&nbsp;-[Uploader(Private)&nbsp;connection:didReceiveData:]&nbsp;-- &nbsp;* &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called&nbsp;when&nbsp;we&nbsp;have&nbsp;data&nbsp;from&nbsp;the&nbsp;server.&nbsp;We&nbsp;expect&nbsp;the&nbsp;server&nbsp;to&nbsp;reply &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;a&nbsp;"YES"&nbsp;if&nbsp;the&nbsp;upload&nbsp;succeeded&nbsp;or&nbsp;"NO"&nbsp;if&nbsp;it&nbsp;did&nbsp;not. &nbsp;* &nbsp;*&nbsp;Results: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*&nbsp;Side&nbsp;effects: &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None &nbsp;* &nbsp;*----------------------------------------------------------------------------- &nbsp;*/-&nbsp;(void)connection:(NSURLConnection&nbsp;*)connection&nbsp;//&nbsp;IN &nbsp;&nbsp;&nbsp;&nbsp;didReceiveData:(NSData&nbsp;*)data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IN{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%s:&nbsp;self:0x%p\n",&nbsp;__func__,&nbsp;self); &nbsp;&nbsp;&nbsp;&nbsp;NSString&nbsp;*reply&nbsp;=&nbsp;[[[NSString&nbsp;alloc]&nbsp;initWithData:data &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding:NSUTF8StringEncoding] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autorelease]; &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"%s:&nbsp;data:&nbsp;%s\n",&nbsp;__func__,&nbsp;[reply&nbsp;UTF8String]); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([reply&nbsp;hasPrefix:@"YES"])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uploadDidSucceed&nbsp;=&nbsp;YES; &nbsp;&nbsp;&nbsp;&nbsp;}}@end用法:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[EPUploader&nbsp;alloc]&nbsp;initWithURL:[NSURL&nbsp;URLWithString:@"http://yourserver.com/uploadDB.php"] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filePath:@"path/to/some/file" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate:self &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doneSelector:@selector(onUploadDone:) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorSelector:@selector(onUploadError:)];

MYYA

创建一个NSURLRequest,然后使用NSURLConnection将其发送到您的服务器。
打开App,查看更多内容
随时随地看视频慕课网APP