国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

iPhone上傳圖片文件到服務器代碼實現案例

移動開發 iOS
iPhone上傳圖片文件到服務器代碼實現案例是本文要介紹的內容,能實現從iPhone壓縮圖片并上傳至服務器的功能。內容主要是基于代碼實現上傳的功能,來看詳細代碼實現。

iPhone上傳圖片文件到服務器代碼實現案例是本文要介紹的內容,能實現從iPhone壓縮圖片并上傳至服務器的功能。內容主要是基于代碼實現上傳的功能,來看詳細代碼實現。

頭文件

  1.  @interface EPUploader : NSObject {  
  2.  NSURL *serverURL;  
  3.  NSString *filePath;  
  4.  id delegate;  
  5.  SEL doneSelector;  
  6.  SEL errorSelector;  
  7.  BOOL uploadDidSucceed;  
  8. }  
  9. -   (id)initWithURL: (NSURL *)serverURL  
  10.   filePath: (NSString *)filePath  
  11.   delegate: (id)delegate  
  12.   doneSelector: (SEL)doneSelector  
  13.   errorSelector: (SEL)errorSelector;  
  14. -   (NSString *)filePath;  
  15. @end 

實現文件

  1.  #import "EPUploader.h"  
  2. #import  
  3. static NSString * const BOUNDRY = @"0xKhTmLbOuNdArY";  
  4. static NSString * const FORM_FLE_INPUT = @"uploaded";  
  5. #define ASSERT(x) NSAssert(x, @"")  
  6. @interface EPUploader (Private)  
  7. - (void)upload;  
  8. - (NSURLRequest *)postRequestWithURL: (NSURL *)url  
  9.         boundry: (NSString *)boundry  
  10.         data: (NSData *)data;  
  11. - (NSData *)compress: (NSData *)data;  
  12. - (void)uploadSucceeded: (BOOL)success;  
  13. - (void)connectionDidFinishLoading:(NSURLConnection *)connection;  
  14. @end  
  15. @implementation EPUploader  
  16. /*  
  17.  *  
  18.  *  
  19.  * -[Uploader initWithURL:filePath:delegate:doneSelector:errorSelector:] --  
  20.  *  
  21.  *   Initializer. Kicks off the upload. Note that upload will happen on a  
  22.  *   separate thread.  
  23.  *  
  24.  * Results:  
  25.  *   An instance of Uploader.  
  26.  *  
  27.  * Side effects:  
  28.  *   None  
  29.  *  
  30.  *  
  31.  */  
  32. - (id)initWithURL: (NSURL *)aServerURL   // IN  
  33.    filePath: (NSString *)aFilePath // IN  
  34.    delegate: (id)aDelegate   // IN  
  35.   doneSelector: (SEL)aDoneSelector // IN  
  36.  errorSelector: (SEL)anErrorSelector  // IN  
  37. {  
  38.  if ((self = [super init])) {  
  39.   ASSERT(aServerURL);  
  40.   ASSERT(aFilePath);  
  41.   ASSERT(aDelegate);  
  42.   ASSERT(aDoneSelector);  
  43.   ASSERT(anErrorSelector);  
  44.   serverURL = [aServerURL retain];  
  45.   filePath = [aFilePath retain];  
  46.   delegate = [aDelegate retain];  
  47.   doneSelector = aDoneSelector;  
  48.   errorSelector = anErrorSelector;  
  49.   [self upload];  
  50.  }  
  51.  return self;  
  52. }  
  53. /*  
  54.  *  
  55.  *  
  56.  * -[Uploader dealloc] --  
  57.  *  
  58.  *   Destructor.  
  59.  *  
  60.  * Results:  
  61.  *   None  
  62.  *  
  63.  * Side effects:  
  64.  *   None  
  65.  *  
  66.  *  
  67.  */  
  68. - (void)dealloc  
  69. {  
  70.  [serverURL release];  
  71.  serverURL = nil;  
  72.  [filePath release];  
  73.  filePath = nil;  
  74.  [delegate release];  
  75.  delegate = nil;  
  76.  doneSelector = NULL;  
  77.  errorSelector = NULL;  
  78.  [super dealloc];  
  79. }  
  80. /*  
  81.  *  
  82.  *  
  83.  * -[Uploader filePath] --  
  84.  *  
  85.  *   Gets the path of the file this object is uploading.  
  86.  *  
  87.  * Results:  
  88.  *   Path to the upload file.  
  89.  *  
  90.  * Side effects:  
  91.  *   None  
  92.  *  
  93.  *  
  94.  */  
  95. - (NSString *)filePath  
  96. {  
  97.  return filePath;  
  98. }  
  99. @end // Uploader  
  100. @implementation EPUploader (Private)  
  101. /*  
  102.  *  
  103.  *  
  104.  * -[Uploader(Private) upload] --  
  105.  *  
  106.  *   Uploads the given file. The file is compressed before beign uploaded.  
  107.  *   The data is uploaded using an HTTP POST command.  
  108.  *  
  109.  * Results:  
  110.  *   None  
  111.  *  
  112.  * Side effects:  
  113.  *   None  
  114.  *  
  115.  *  
  116.  */  
  117. - (void)upload  
  118. {  
  119.  NSData *data = [NSData dataWithContentsOfFile:filePath];  
  120.  ASSERT(data);  
  121.  if (!data) {  
  122.   [self uploadSucceeded:NO];  
  123.   return;  
  124.  }  
  125.  if ([data length] == 0) {  
  126.   // There's no data, treat this the same as no file.  
  127.   [self uploadSucceeded:YES];  
  128.   return;  
  129.  }  
  130. //  NSData *compressedData = [self compress:data];  
  131. //  ASSERT(compressedData && [compressedData length] != 0);  
  132. //  if (!compressedData || [compressedData length] == 0) {  
  133. //   [self uploadSucceeded:NO];  
  134. //   return;  
  135. //  }  
  136.  NSURLRequest *urlRequest = [self postRequestWithURL:serverURL  
  137.    boundry:BOUNDRY  
  138.    data:data];  
  139.  if (!urlRequest) {  
  140.   [self uploadSucceeded:NO];  
  141.   return;  
  142.  }  
  143.  NSURLConnection * connection =  
  144.  [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];  
  145.  if (!connection) {  
  146.   [self uploadSucceeded:NO];  
  147.  }  
  148.  // Now wait for the URL connection to call us back.  
  149. }  
  150. /*  
  151.  *  
  152.  *  
  153.  * -[Uploader(Private) postRequestWithURL:boundry:data:] --  
  154.  *  
  155.  *   Creates a HTML POST request.  
  156.  *  
  157.  * Results:  
  158.  *   The HTML POST request.  
  159.  *  
  160.  * Side effects:  
  161.  *   None  
  162.  *  
  163.  *  
  164.  */  
  165. - (NSURLRequest *)postRequestWithURL: (NSURL *)url  // IN  
  166.         boundry: (NSString *)boundry // IN  
  167.         data: (NSData *)data   // IN  
  168. {  
  169.  // from http://www.cocoadev.com/index.pl?HTTPFileUpload  
  170.  NSMutableURLRequest *urlRequest =  
  171.  [NSMutableURLRequest requestWithURL:url];  
  172.  [urlRequest setHTTPMethod:@"POST"];  
  173.  [urlRequest setValue:  
  174.   [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundry]  
  175.    forHTTPHeaderField:@"Content-Type"];  
  176.  NSMutableData *postData =  
  177.  [NSMutableData dataWithCapacity:[data length] + 512];  
  178.  [postData appendData:  
  179.   [[NSString stringWithFormat:@"--%@rn", boundry] dataUsingEncoding:NSUTF8StringEncoding]];  
  180.  [postData appendData:  
  181.   [[NSString stringWithFormat:  
  182.     @"Content-Disposition: form-data; name="%@"filename="file.bin"rnrn", FORM_FLE_INPUT]  
  183.    dataUsingEncoding:NSUTF8StringEncoding]];  
  184.  [postData appendData:data];  
  185.  [postData appendData:  
  186.   [[NSString stringWithFormat:@"rn--%@--rn", boundry] dataUsingEncoding:NSUTF8StringEncoding]];  
  187.  [urlRequest setHTTPBody:postData];  
  188.  return urlRequest;  
  189. }  
  190. /*  
  191.  *  
  192.  *  
  193.  * -[Uploader(Private) compress:] --  
  194.  *  
  195.  *   Uses zlib to compress the given data.  
  196.  *  
  197.  * Results:  
  198.  *   The compressed data as a NSData object.  
  199.  *  
  200.  * Side effects:  
  201.  *   None  
  202.  *  
  203.  *  
  204.  */  
  205. - (NSData *)compress: (NSData *)data // IN  
  206. {  
  207.  if (!data || [data length] == 0)  
  208.   return nil;  
  209.  // zlib compress doc says destSize must be 1% + 12 bytes greater than source.  
  210.  uLong destSize = [data length] * 1.001 + 12;  
  211.  NSMutableData *destData = [NSMutableData dataWithLength:destSize];  
  212.  int error = compress([destData mutableBytes],  
  213.            &destSize,  
  214.            [data bytes],  
  215.            [data length]);  
  216.  if (error != Z_OK) {  
  217.   NSLog(@"%s: self:0x%p, zlib error on compress:%dn",__func__, self, error);  
  218.   return nil;  
  219.  }  
  220.  [destData setLength:destSize];  
  221.  return destData;  
  222. }  
  223. /*  
  224.  *  
  225.  *  
  226.  * -[Uploader(Private) uploadSucceeded:] --  
  227.  *  
  228.  *   Used to notify the delegate that the upload did or did not succeed.  
  229.  *  
  230.  * Results:  
  231.  *   None  
  232.  *  
  233.  * Side effects:  
  234.  *   None  
  235.  *  
  236.  *  
  237.  */  
  238. - (void)uploadSucceeded: (BOOL)success // IN  
  239. {  
  240.  [delegate performSelector:success ? doneSelector : errorSelector  
  241.          withObject:self];  
  242. }  
  243. /*  
  244.  *  
  245.  *  
  246.  * -[Uploader(Private) connectionDidFinishLoading:] --  
  247.  *  
  248.  *   Called when the upload is complete. We judge the success of the upload  
  249.  *   based on the reply we get from the server.  
  250.  *  
  251.  * Results:  
  252.  *   None  
  253.  *  
  254.  * Side effects:  
  255.  *   None  
  256.  *  
  257.  *  
  258.  */  
  259. - (void)connectionDidFinishLoading:(NSURLConnection *)connection // IN  
  260. {  
  261.  NSLog(@"%s: self:0x%pn", __func__, self);  
  262.  [connection release];  
  263.  [self uploadSucceeded:uploadDidSucceed];  
  264. }  
  265. /*  
  266.  *  
  267.  *  
  268.  * -[Uploader(Private) connection:didFailWithError:] --  
  269.  *  
  270.  *   Called when the upload failed (probably due to a lack of network  
  271.  *   connection).  
  272.  *  
  273.  * Results:  
  274.  *   None  
  275.  *  
  276.  * Side effects:  
  277.  *   None  
  278.  *  
  279.  *  
  280.  */  
  281. - (void)connection:(NSURLConnection *)connection // IN  
  282.   didFailWithError:(NSError *)error     // IN  
  283. {  
  284.  NSLog(@"%s: self:0x%p, connection error:%sn",  
  285.     __func__, self, [[error description] UTF8String]);  
  286.  [connection release];  
  287.  [self uploadSucceeded:NO];  
  288. }  
  289. /*  
  290.  *  
  291.  *  
  292.  * -[Uploader(Private) connection:didReceiveResponse:] --  
  293.  *  
  294.  *   Called as we get responses from the server.  
  295.  *  
  296.  * Results:  
  297.  *   None  
  298.  *  
  299.  * Side effects:  
  300.  *   None  
  301.  *  
  302.  *  
  303.  */  
  304. -(void)    connection:(NSURLConnection *)connection // IN  
  305.    didReceiveResponse:(NSURLResponse *)response  // IN  
  306. {  
  307.  NSLog(@"%s: self:0x%pn", __func__, self);  
  308. }  
  309. /*  
  310.  *  
  311.  *  
  312.  * -[Uploader(Private) connection:didReceiveData:] --  
  313.  *  
  314.  *   Called when we have data from the server. We expect the server to reply  
  315.  *   with a "YES" if the upload succeeded or "NO" if it did not.  
  316.  *  
  317.  * Results:  
  318.  *   None  
  319.  *  
  320.  * Side effects:  
  321.  *   None  
  322.  *  
  323.  *  
  324.  */  
  325. - (void)connection:(NSURLConnection *)connection // IN  
  326.  didReceiveData:(NSData *)data    // IN  
  327. {  
  328.  NSLog(@"%s: self:0x%pn", __func__, self);  
  329.  NSString *reply = [[[NSString alloc] initWithData:data  
  330.                      encoding:NSUTF8StringEncoding]  
  331.            autorelease];  
  332.  NSLog(@"%s: data: %sn", __func__, [reply UTF8String]);  
  333.  if ([reply hasPrefix:@"YES"]) {  
  334.   uploadDidSucceed = YES;  
  335.  }  
  336. }  
  337. @end 

使用方法

  1. [[EPUploader alloc] initWithURL:[NSURL URLWithString:@"http://yourserver.com/uploadDB.php"]  
  2.  filePath:@"path/to/some/file"  
  3.  delegate:self  
  4.  doneSelector:@selector(onUploadDone:)  
  5.  errorSelector:@selector(onUploadError:)]; 

小結:iPhone上傳圖片文件到服務器代碼實現案例的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: CocoaChina
相關推薦

2024-03-14 10:51:13

服務器技術.NET Core

2015-09-28 13:39:13

Http網絡協議HTTP

2015-10-10 16:46:14

HTTP網絡協議文件傳輸

2015-10-09 09:41:24

HTTP網絡協議文件傳輸

2015-10-08 09:38:24

HTTP網絡協議文件傳輸

2015-09-29 09:25:20

HTTP網絡協議

2011-08-18 16:32:23

iPhone客戶端服務器

2022-01-10 11:52:46

Gitee服務器代碼

2022-03-01 20:33:50

服務web項目

2011-08-18 15:40:20

iPhone文本切頁

2011-08-19 17:02:46

iPhone開發

2020-12-02 11:48:05

TFTP

2011-07-26 16:43:59

iPhone Web 服務器

2009-11-16 10:16:24

PHP文件上傳

2009-11-16 10:40:02

PHP上傳文件代碼

2017-03-02 11:58:31

NodeJS服務器

2010-08-31 22:27:11

DHCP服務器

2011-08-19 10:05:30

iPhone開發

2011-08-18 16:42:07

iPhone應用APNS推送

2018-03-23 14:48:27

靜態服務器實現
點贊
收藏

51CTO技術棧公眾號

国产女人精品视频| 国产精品一品二品| 欧美一级二级三级乱码| 国产最顶级的黄色片在线免费观看| 日韩国产高清影视| 亚洲免费福利一区| 亚洲日本va在线观看| 国产日韩精品在线播放| 2021av天天| 国产尤物精品| 日韩精品在线视频| 成人福利资源| 日本伊人精品一区二区三区观看方式| 国产一区二区三区香蕉 | 欧美成人艳星乳罩| 日本在线丨区| 亚洲午夜视频在线观看| 丁香婷婷自拍| 亚洲乱码国产乱码精品精可以看| 美女av电影| 亚洲一区二区三区爽爽爽爽爽| 美日韩在线观看| 亚洲精品免费播放| 亚洲精品男人| 欧美亚州韩日在线看免费版国语版| 国产网站在线播放| 5月丁香婷婷综合| 青草影视电视剧免费播放在线观看| 日韩欧美国产一区二区在线播放| av观看在线| 亚洲加勒比久久88色综合| 2021中文字幕在线| 伊人久久男人天堂| 亚洲精品在线国产| 日韩av电影在线免费播放| 91日韩欧美| 蜜桃av色综合| 国产高清精品网站| 五月天av在线播放| 五月天婷婷综合| 日本福利片高清在线观看| 精品视频在线免费| 黄色成人免费网| 久久久久久久久久久网站| 国产成人手机高清在线观看网站| 成人动漫视频在线观看免费| 中文字幕乱在线伦视频乱在线伦视频 | 国产精品成熟老女人| 日本中文字幕一区二区| 亚洲精品视频二区| 日本在线影院| 亚洲高清久久网| 精品国产亚洲一区二区三区| 韩漫成人漫画| 日韩小视频在线| 美女av一区| 国产福利久久| 成人免费高清视频在线观看| www.久草| 欧美色图天堂网| 日韩毛片一区| 成人免费视频网址| 国产一区二区导航在线播放| 日韩中文字幕a| 在线观看日韩一区| 精品三区视频| 成人精品网站在线观看| 麻豆国产精品视频| 2019一级黄色毛片免费看网| 欧美v日韩v国产v| 鲁大师精品99久久久| 日韩不卡av| 国产精品国产三级国产aⅴ入口 | 久久精品亚洲一区二区三区浴池 | 精品久久久久久综合日本| 成人午夜激情影院| 日韩大片b站免费观看直播| 国产亚洲欧洲高清| 欧美成人69| www日韩在线观看| 91精品国产品国语在线不卡| 欧美理论电影在线精品| 亚洲一区二区三区色| 五月激情六月综合| 一区在线不卡| 亚洲国产精品视频一区| 亚洲资源中文字幕| 精品肉辣文txt下载| 国产一区二区三区色淫影院| 狠狠操一区二区三区| 久久久久久久久久久免费精品 | 欧美国产日韩亚洲一区| 黄色网在线免费看| 国产精品9999| 白白色亚洲国产精品| 男人的天堂在线视频免费观看| 欧美在线视频观看| 国产999精品久久久久久| 麻豆传媒在线免费看| 国产成人在线视频| 2014亚洲片线观看视频免费| 麻豆视频在线观看免费网站黄| 亚洲曰本av电影| 亚洲欧洲99久久| 日韩五码电影| 婷婷久久伊人| 欧美日韩国产系列| 久久亚洲成人| 国产视频97| 欧美高跟鞋交xxxxxhd| 国产中文字幕一区| 久草成色在线| 久久久亚洲综合网站| 五月激情综合色| 要久久电视剧全集免费| 国产高潮免费视频| 九九精品视频在线| 成人动漫一区二区三区| 黄色漫画在线免费看| 日本三级中国三级99人妇网站| 欧美日韩一二三四五区| 免费国产自久久久久三四区久久| 免费激情视频在线观看| 四虎成人免费在线| 欧美俄罗斯乱妇| 久久亚洲精精品中文字幕早川悠里 | www.成人| 国产日韩av在线播放| 久久久久国产一区二区三区四区 | 久久久久久久9| 日韩成人在线网站| 久草在线在线精品观看| heyzo在线欧美播放| 日韩欧美亚洲区| 亚洲成人黄色在线| 久久国内精品自在自线400部| 国产美女一区视频| 曰韩不卡视频| 中文字幕一区电影| 中文字幕高清不卡| 俺要去色综合狠狠| 日韩av免费一区| 久久久99精品久久| 蜜臀av一区| 三级a在线观看| 欧美黄色三级网站| 艳妇臀荡乳欲伦亚洲一区| 北条麻妃一区二区三区在线| 色综合色综合色综合色综合| 国产精品com| 色婷婷综合在线| 日韩一级免费| 校园春色亚洲| 国产成人综合一区| 日韩免费观看视频| 日韩欧美在线看| 日本成人在线电影网| 成人mm视频在线观看| 日本三级黄色网址| 97人人做人人人难人人做| 日韩午夜激情免费电影| 国产盗摄女厕一区二区三区| 国产精品白丝一区二区三区| 一本大道香蕉久久| 欧美日韩高清在线一区| 99久久精品网| 91国内在线| 成品人视频ww入口| 日本精品va在线观看| 欧美日韩免费在线视频| 国产精品99久久久久久久女警 | 久久精品免费观看| 成人豆花视频| 中文字幕不卡| 日韩三级电影| 欧美大片在线看免费观看| 欧美日韩中文字幕日韩欧美| 精彩视频一区二区| 亚洲精品不卡在线观看| 大胆av不用播放器在线播放| 一区二区免费在线观看| 欧美日韩激情四射| 777永久免费网站国产| 少妇激情av一区二区三区| 中文字幕不卡| 欧美少妇网站| 欧美极品免费| 欧美男人操女人视频| 自拍另类欧美| 欧美第一淫aaasss性| 欧美日韩三级视频| 丁香啪啪综合成人亚洲小说| 国产成人调教视频在线观看| 黄av在线播放| 亚洲娇小娇小娇小| 色女孩综合网| 国产精品嫩草影院久久久| 亚洲欧美国产精品| 色婷婷综合激情| 国产午夜精品一区二区|