真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用post方法上傳文件的兩種做法-創(chuàng)新互聯(lián)


項(xiàng)目需要使用HTTP協(xié)議中的POST方法上傳文件,稍微總結(jié)了一下,將過程貼出來,方便以后參考。有兩種方法,第一是使用NSMutableURLRequest完全從零開始設(shè)置,可以加深對HTTP協(xié)議的理解;第二種是直接使用別人封裝好的代碼,如AFNetworking。

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、烏恰網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為烏恰等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
方法一,從0開始文件上傳
NSURL *url = [NSURL URLWithString:@"http://yo.diveinedu.com/upload.php"];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";//0. 設(shè)置分隔符NSString *boundary = @"a1b2c3d4e5f6";[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];NSLog(@"%@", request.allHTTPHeaderFields);NSMutableData *httpBody = [NSMutableData data];//1. 開始的分隔符[httpBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];//2. 設(shè)置內(nèi)容: 標(biāo)簽名,文件名等[httpBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"fileToUpload\"; filename=\"%@\"\r\n", @"mask0.png"] dataUsingEncoding:NSUTF8StringEncoding]];NSString *path = [[NSBundle mainBundle] pathForResource:@"mask0" ofType:@"png"];NSLog(@"%@", [self typeForPath:path]);//3. 設(shè)置內(nèi)容格式[httpBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", [self typeForPath:path]] dataUsingEncoding:NSUTF8StringEncoding]];NSString *body = [[NSString alloc] initWithData:httpBody encoding:NSUTF8StringEncoding];NSLog(@"%@", body);//4. 添加真正的內(nèi)容NSData *data = [NSData dataWithContentsOfFile:path];[httpBody appendData:data];//5. 添加結(jié)束邊界[httpBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];//6. 設(shè)置http bodyrequest.HTTPBody = httpBody;//7. 發(fā)送請求[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", str);}];

重點(diǎn):

  1. 注意協(xié)議中需要使用回車換行(\r\n)的位置,HTTP是一個(gè)基于文本行的協(xié)議,通過回車換行來控制格式。

  2. 注意分隔符(Boundary)的設(shè)置,尤其是(--)的增加。

設(shè)置后的內(nèi)容應(yīng)該是下面的樣子(為了看得更清楚,將回車換行用文字表示出來了):

POST /upload.php HTTP/1.1\r\nHost: yo.diveinedu.com\r\nContent-Type: multipart/form-data; boundary=abcdefghigk\r\n\r\nContent-Disposition: form-data; name="fileToUpload"; filename="mask0.png"\r\nContent-Type: p_w_picpath/png\r\n\r\n--abcdefghigk\r\n圖片數(shù)據(jù)\r\n--abcdefghigk--\r
方法二,使用AFNetworking中的方法
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];[manager POST:@"http://yo.diveinedu.com/upload.php" parameters:nil constructingBodyWithBlock:^(id formData) {
    //1. 方法一//        NSError *error;//        if (![formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"fileToUpload" fileName:[path lastPathComponent] mimeType:@"p_w_picpath/png" error:&error]) {//            NSLog(@"error appending part: %@", error);//        }

    //2. 方法二
    NSData *data = [NSData dataWithContentsOfFile:path];
    [formData appendPartWithFileData:data name:@"fileToUpload" fileName:[path lastPathComponent] mimeType:@"p_w_picpath/png"];} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSData *data = (NSData *)responseObject;
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", str);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"%@", error);}];

進(jìn)行網(wǎng)絡(luò)編程的時(shí)候,可以使用Wireshark之類的抓包工具輔助調(diào)試。可以很明確的看到發(fā)送或接收的數(shù)據(jù)是否正確。

最后祝大家兒童節(jié)快樂~~~

http://io.diveinedu.com

http://www.diveinedu.com

http://bbs.diveinedu.com

https://github.com/DiveinEdu-CN

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。


分享題目:使用post方法上傳文件的兩種做法-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/dodcdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部