IOS-網絡(文件上傳)

?

  1 //
  2 //  ViewController.m
  3 //  IOS_0206_文件上傳
  4 //
  5 //  Created by ma c on 16/2/6.
  6 //  Copyright ? 2016年 博文科技. All rights reserved.
  7 //
  8 
  9 #import "ViewController.h"
 10 #define BWFileBoundary @"----------BowenKeJi"
 11 #define BWNewLine @"\r\n"
 12 #define BWEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
 13 
 14 @interface ViewController ()
 15 
 16 @end
 17 
 18 @implementation ViewController
 19 
 20 /*
 21  一、文件上傳的概括
 22  參數1
 23  參數2
 24  結束標記3
 25  
 26  --------------------------------------------------------------
 27  二、文件上傳的格式
 28  
 29  1.文件參數
 30  BowenKeJi
 31  
 32  Content-Disposition: form-data; name="參數名"; filename="文件名"
 33  
 34  Content-Type: 文件類型/MIMEType
 35  
 36  
 37  文件具體數據
 38  
 39  2.非文件參數
 40  BowenKeJi
 41  
 42  Content-Disposition: form-data; name="參數名"
 43  
 44  
 45  參數值
 46  
 47  3.結束標記
 48  BowenKeJi--
 49  
 50  -------------------------------------------------------------------
 51  三、文件的MIMEType
 52  1.百度搜索
 53  2.apache-tomcat-版本號/conf/web.xml
 54  3.加載文件時通過Reponse獲得
 55  -------------------------------------------------------------------
 56  */
 57 
 58 - (void)viewDidLoad {
 59     [super viewDidLoad];
 60     
 61     self.view.backgroundColor = [UIColor cyanColor];
 62     
 63     NSString *name = @"jack";
 64     [self test:&name];
 65     NSLog(@"%@",name);
 66 
 67 }
 68 
 69 ///在方法中更改字符串的值
 70 - (void)test:(NSString **)str
 71 {
 72     *str = @"bowen";
 73 }
 74 
 75 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 76 {
 77     //[self upload];
 78     
 79     //文件參數
 80     NSDictionary *params = @{
 81                              @"username" : @"bowen"
 82                              };
 83     //文件數據
 84 //    UIImage *image = [UIImage imageNamed:@"abc"];
 85 //    NSData *imgData = UIImageJPEGRepresentation(image, 1);
 86 //    [self upload:@"text.png" AndMIMEType:@"image/png" AndfileData:imgData AndParams:params];
 87     
 88     NSURL *url = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"];
 89     NSData *data = [NSData dataWithContentsOfURL:url];
 90     NSString *MIMEType = [self MIMEType:url];
 91     [self upload:@"cba.jpg" AndMIMEType:MIMEType AndfileData:data AndParams:params];
 92     
 93     
 94 //    NSURL *url1 = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"];
 95 //    //NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/hehe.text"];
 96 //    NSString *mimeType = [self MIMEType:url1];
 97 //    NSLog(@"%@",mimeType);
 98     
 99 }
100 
101 ///文件的MIMEType
102 - (NSString *)MIMEType:(NSURL *)url
103 {
104     //1.創建一個請求
105     NSURLRequest *request = [NSURLRequest requestWithURL:url];
106     
107     NSURLResponse *response = nil;
108     //2.發送請求(返回響應)
109     [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
110     //3.獲得MIMEType
111     return response.MIMEType;
112 }
113 
114 ///文件上傳未封裝
115 - (void)upload
116 {
117      // 1.請求路徑
118      NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"];
119      // 2.創建一個POST請求
120      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
121      request.HTTPMethod = @"POST";
122      // 2.設置請求頭(告訴服務器這次上傳的是文件數據)
123      NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary];
124      [request setValue:contentType forHTTPHeaderField:@"Content-Type"];
125      // 3.設置請求體
126      NSMutableData *body = [NSMutableData data];
127      
128      // 4.1文件參數
129      [body appendData:BWEncode(@"--")];
130      [body appendData:BWEncode(BWFileBoundary)];
131      [body appendData:BWEncode(BWNewLine)];
132      
133      [body appendData:BWEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"ts.jpg\"")];
134      [body appendData:BWEncode(BWNewLine)];
135      
136      [body appendData:BWEncode(@"Content-Type: image/jpg")];
137      [body appendData:BWEncode(BWNewLine)];
138      
139      //具體內容
140      [body appendData:BWEncode(BWNewLine)];
141      UIImage *image = [UIImage imageNamed:@"abc"];
142      NSData *imgData = UIImageJPEGRepresentation(image, 1);
143      [body appendData:imgData];
144      [body appendData:BWEncode(BWNewLine)];
145      
146      // 4.2非文件參數(用戶名參數)
147      [body appendData:BWEncode(@"--")];
148      [body appendData:BWEncode(BWFileBoundary)];
149      [body appendData:BWEncode(BWNewLine)];
150      
151      [body appendData:BWEncode(@"Content-Disposition: form-data; name=\"username\"")];
152      [body appendData:BWEncode(BWNewLine)];
153      
154      [body appendData:BWEncode(BWNewLine)];
155      [body appendData:BWEncode(@"bowen")];
156      [body appendData:BWEncode(BWNewLine)];
157      
158      // 4.3結束標記
159      [body appendData:BWEncode(@"--")];
160      [body appendData:BWEncode(BWFileBoundary)];
161      [body appendData:BWEncode(@"--")];
162      [body appendData:BWEncode(BWNewLine)];
163      
164      request.HTTPBody = body;
165      
166      // 5.發送請求
167      [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
168      NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
169      NSLog(@"%@",dict);
170      }];
171 }
172      
173 ///文件上傳封裝
174 - (void)upload:(NSString *)filename AndMIMEType:(NSString *)mimeType AndfileData:(NSData *)fileData
175    AndParams:(NSDictionary *)dict
176 {
177     // 1.請求路徑
178     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"];
179     // 2.創建一個POST請求
180     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
181     request.HTTPMethod = @"POST";
182     // 2.設置請求頭(告訴服務器這次上傳的是文件數據)
183     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary];
184     [request setValue:contentType forHTTPHeaderField:@"Content-Type"];
185     // 3.設置請求體
186     NSMutableData *body = [NSMutableData data];
187     
188     // 4.1文件參數
189     [body appendData:BWEncode(@"--")];
190     [body appendData:BWEncode(BWFileBoundary)];
191     [body appendData:BWEncode(BWNewLine)];
192     NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"",filename];
193     [body appendData:BWEncode(disposition)];
194     [body appendData:BWEncode(BWNewLine)];
195     
196     NSString *type = [NSString stringWithFormat:@"Content-Type: %@",mimeType];
197     [body appendData:BWEncode(type)];
198     [body appendData:BWEncode(BWNewLine)];
199     
200     //具體內容
201     [body appendData:BWEncode(BWNewLine)];
202     [body appendData:fileData];
203     [body appendData:BWEncode(BWNewLine)];
204     
205     // 4.2非文件參數(用戶名參數)
206 
207     [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
208         [body appendData:BWEncode(@"--")];
209         [body appendData:BWEncode(BWFileBoundary)];
210         [body appendData:BWEncode(BWNewLine)];
211         
212         NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"",key];
213         
214         [body appendData:BWEncode(disposition)];
215         [body appendData:BWEncode(BWNewLine)];
216         
217         [body appendData:BWEncode(BWNewLine)];
218         [body appendData:BWEncode([obj description])];
219         [body appendData:BWEncode(BWNewLine)];
220 
221     }];
222     // 4.3結束標記
223     [body appendData:BWEncode(@"--")];
224     [body appendData:BWEncode(BWFileBoundary)];
225     [body appendData:BWEncode(@"--")];
226     [body appendData:BWEncode(BWNewLine)];
227     
228     request.HTTPBody = body;
229     
230     // 5.發送請求
231     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
232         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
233         NSLog(@"%@",dict);
234     }];
235 }
236 @end

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285701.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mac SecureCRT設置

參考&#xff1a; http://www.2cto.com/os/201407/320292.html SecureCRT 設置 1&#xff09;每次登陸都要輸入密碼&#xff1a; Global Option -> General 取消&#xff1a;Use Keychain前面的勾 2&#xff09;Logon Actions Logon Actions很強大&#xff0c;和python里…

【微服務專題之】.Net6下集成消息隊列上-RabbitMQ

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 請公眾號后臺留言 源碼;[如果覺得本公眾號對您有幫助&#xff0c;歡迎關注].Net中RabbitMQ的使用超清觀看視頻哦~官網鏈接RabbitMQ代碼演示-詳細見代碼注釋&#xff0c;操作看上文視…

[轉]總結:Apache/Tomcat/JBOSS/Jetty/Nginx區別 .

總結&#xff1a;Apache/Tomcat/JBOSS/Nginx區別 . 1、Apache是Web服務器&#xff0c;Tomcat是應用&#xff08;Java&#xff09;服務器。Tomcat在中小型系統和并發訪問用戶不是很多的場合下被普遍使用。Apache支持靜態頁&#xff0c;Tomcat支持動態的。 2、Jetty:Tomcat內核作…

華為云GaussDB,11.11讓企業無后顧之憂

每年11.11大促對于數據庫而言都是一場生死考驗&#xff0c;如何保障系統的穩定可靠&#xff0c;如何平穩度過業務流量洪峰期&#xff0c;如何高效擴容&#xff0c;成為每個參與活動客戶的一大痛點。本文將通過5個常見的大促問題及分析&#xff0c;看看華為云GaussDB是如何解決這…

【CC精品教程】ContextCapture(CC)集群處理環境部署圖文教程

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 鑒于CC其三維構建運算的本質,海量數據的解析運算會使用大量的計算機資源,而再好的單臺計算機也無法勝過多臺計算機的并行運算能力,故而借助局域網內多臺計算機設備進行三維構建運算,可以節省大…

Linux-PAM PAM-MySQL的總結

1、理論知識 1.1、PAM模塊 1.1.1、PAM的介紹 Pluggable Authentication Modules簡稱PAM&#xff0c;是一個微縮的可插入認證模塊&#xff08;PAM is an acronym for Pluggable Authentication Modules&#xff09; 1.1.2、PAM的結構 1)模塊層(PAM服務模塊) - PAM結構最底層 作用…

ubuntu下配置jdk(離線壓縮包方式)

2019獨角獸企業重金招聘Python工程師標準>>> 1&#xff0c;下載jdk壓縮包 2、解壓后得到名字為jdk1.7.0_21的文件夾&#xff0c;將其復制到 /usr/lib/jvm下&#xff08;需要新建jvm文件夾&#xff09;。3、配置jdk環境變量&#xff1a;在啟動終端并輸入 gedit /e…

【PhotoScan精品教程】PhotoScan簡介、安裝教程(附PhotoScan1.4.5安裝包下載)

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) PhotoScan在無人機航空攝影測量空三運算中,具有運行速度快、精度高等特點。PhotoScan空三運算的結果可以導入CC等進行模型構建。【PhotoScan精品教程】講解利用PhotoScan軟件進行航測內業空三運算…

利用JS腳本快速刪除百度網盤同一目錄下的不需要文件(可以參考這個方法刪除重復文件)

比如百度網盤某目錄下存有如下文件&#xff1a; 要求&#xff1a;將如上圖文件目錄下的文件&#xff0c;每個月只保留最后&#xff08;新&#xff09;一個&#xff08;根據文件名中包含的日期&#xff09;&#xff0c;其它刪除。 比如7月份有3個文件&#xff0c;只保留2019-07-…

vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu

1、問題 vuePress執行build操作的時候 vuepress build ~/my_blogs/docs/ 錯誤提示如下 YAMLException: end of the stream or a document separator is expected at line 7, column 9:features:^at generateError (/usr/lib/node_modules/vuepress/node_modules/js-yaml/lib…

依賴注入之針對不同類型變量的幾種注入方式

控制反轉(Inversion of Control)和依賴注入(Dependency Injection)講的都是一個概念,只不過是站在了不同的角度,所謂的依賴注入: 依賴注入&#xff08;DI&#xff09;是指在運行期&#xff0c;由外部容器動態地將依賴對象注入到組件中。當spring容器啟動后&#xff0c;spring容…

【本周六活動】.NET Day in China

點擊藍字關注我們編輯&#xff1a;Alan Wang排版&#xff1a;Rani Sun活動介紹去年11月&#xff0c;.NET 6 的發布&#xff0c;為我們帶來了 .NET 多平臺應用 UI&#xff08;.NET MAUI&#xff09;。就在前不久&#xff0c;.NET MAUI 已正式發布。未來&#xff0c;作為 .NET 7 …

【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三 【PhotoScan精品教程】任務二:刺像控點,平差,質量報告精度檢查,像控點POS權重調配 【PhotoScan…

[轉]Angular 單元測試講解

Angular_單元測試 測試分類 按開發階段劃分按是否運行劃分按是否查看源代碼劃分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular單元測試 Karma的介紹jasmine介紹單元測試的好處使用jasmine和karma創建一個Angular項目Karma配置Test.ts文件測試體驗測試Form測試服務service常用斷言…

windows執行python文件提示SyntaxError: Non-ASCII character ‘\xe9‘ in file 1.py on line 7, but no encoding d

1、問題 windows環境下執行python文件&#xff0c;提示錯誤如下 SyntaxError: Non-ASCII character \xe9 in file 1.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 2、解決辦法 py文件頭部加上 #codingutf-8

按鍵精靈如何調用Excel及按鍵精靈寫入Excel數據的方法教程---入門自動操作表格...

首先來建立一個新的Excel文檔&#xff0c;在桌面上點擊右鍵&#xff0c;選擇【新建】-【Excel工作表】&#xff0c;命名為【新手學員】。 現在這個新Excel文檔是空白的&#xff0c;我們接下來會通過按鍵精靈的腳本來打開并寫入一些數據。打開按鍵精靈軟件&#xff0c;點擊【新建…

第九十五節,移動流體布局和響應式布局總結

移動流體布局和響應式布局總結 寬度與高度 區塊寬度一般用max-width 最大寬度和百分比&#xff0c;來定義寬度&#xff0c;因為要實現自動縮放 高度如果要自適應&#xff0c;就不需要定義高度&#xff0c;或者定義最小高度 注意&#xff1a;橫向的盡量用百分比&#xff0c;如邊…

Maui的學習之路 -- 開篇

Maui的學習之路 -- 開篇想了很久我決定發一個Maui介紹做為開篇&#xff0c;雖然這是老生常談的話題&#xff0c;但是不能沒有這樣的探討&#xff08;請容我水一篇&#xff09;。什么是.NET Maui.NET Maui是微軟的一款基于.Net多平臺應用 UI (.NET MAUI)的跨平臺框架&#xff0c…

【PhotoScan精品教程】任務二:刺像控點,平差,質量報告精度檢查,像控點POS權重調配

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三 【PhotoScan精品教程】任務二:刺像控點,平差,質量報告精度檢查,像控點POS權重調配 【PhotoScan…

互聯網架構的演變,看了好多這個講的確實清楚!

從過去的 OA、CRM、ERP 等單機即可滿足要求的系統到現代互聯網時代各大公司的分布式、微服務平臺&#xff0c;互聯網架構正在經歷著巨大的變革&#xff0c;技術也在不斷的更新迭代。 圖片來自 Pexels這也意味著眾多軟件開發者們的壓力和挑戰正在不斷的加大&#xff0c;這種新技…