您的位置:首页 > 理论基础 > 计算机网络

IOS-网络(文件上传)

2016-02-08 22:45 666 查看
//
//  ViewController.m
//  IOS_0206_文件上传
//
//  Created by ma c on 16/2/6.
//  Copyright © 2016年 博文科技. All rights reserved.
//

#import "ViewController.h"
#define BWFileBoundary @"----------BowenKeJi"
#define BWNewLine @"\r\n"
#define BWEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]

@interface ViewController ()

@end

@implementation ViewController

/*
一、文件上传的概括
参数1
参数2
结束标记3

--------------------------------------------------------------
二、文件上传的格式

1.文件参数
BowenKeJi

Content-Disposition: form-data; name="参数名"; filename="文件名"

Content-Type: 文件类型/MIMEType

文件具体数据

2.非文件参数
BowenKeJi

Content-Disposition: form-data; name="参数名"

参数值

3.结束标记
BowenKeJi--

-------------------------------------------------------------------
三、文件的MIMEType
1.百度搜索
2.apache-tomcat-版本号/conf/web.xml
3.加载文件时通过Reponse获得
-------------------------------------------------------------------
*/

- (void)viewDidLoad {
[super viewDidLoad];

self.view.backgroundColor = [UIColor cyanColor];

NSString *name = @"jack";
[self test:&name];
NSLog(@"%@",name);

}

///在方法中更改字符串的值
- (void)test:(NSString **)str
{
*str = @"bowen";
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//[self upload];

//文件参数
NSDictionary *params = @{
@"username" : @"bowen"
};
//文件数据
//    UIImage *image = [UIImage imageNamed:@"abc"];
//    NSData *imgData = UIImageJPEGRepresentation(image, 1);
//    [self upload:@"text.png" AndMIMEType:@"image/png" AndfileData:imgData AndParams:params];

NSURL *url = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *MIMEType = [self MIMEType:url];
[self upload:@"cba.jpg" AndMIMEType:MIMEType AndfileData:data AndParams:params];

//    NSURL *url1 = [[NSBundle mainBundle] URLForResource:@"abc" withExtension:@"jpg"];
//    //NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/hehe.text"];
//    NSString *mimeType = [self MIMEType:url1];
//    NSLog(@"%@",mimeType);

}

///文件的MIMEType
- (NSString *)MIMEType:(NSURL *)url
{
//1.创建一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSURLResponse *response = nil;
//2.发送请求(返回响应)
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
//3.获得MIMEType
return response.MIMEType;
}

///文件上传未封装
- (void)upload
{
// 1.请求路径
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"];
// 2.创建一个POST请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 2.设置请求头(告诉服务器这次上传的是文件数据)
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
// 3.设置请求体
NSMutableData *body = [NSMutableData data];

// 4.1文件参数
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(BWNewLine)];

[body appendData:BWEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"ts.jpg\"")];
[body appendData:BWEncode(BWNewLine)];

[body appendData:BWEncode(@"Content-Type: image/jpg")];
[body appendData:BWEncode(BWNewLine)];

//具体内容
[body appendData:BWEncode(BWNewLine)];
UIImage *image = [UIImage imageNamed:@"abc"];
NSData *imgData = UIImageJPEGRepresentation(image, 1);
[body appendData:imgData];
[body appendData:BWEncode(BWNewLine)];

// 4.2非文件参数(用户名参数)
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(BWNewLine)];

[body appendData:BWEncode(@"Content-Disposition: form-data; name=\"username\"")];
[body appendData:BWEncode(BWNewLine)];

[body appendData:BWEncode(BWNewLine)];
[body appendData:BWEncode(@"bowen")];
[body appendData:BWEncode(BWNewLine)];

// 4.3结束标记
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWNewLine)];

request.HTTPBody = body;

// 5.发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@",dict);
}];
}

///文件上传封装
- (void)upload:(NSString *)filename AndMIMEType:(NSString *)mimeType AndfileData:(NSData *)fileData
AndParams:(NSDictionary *)dict
{
// 1.请求路径
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/upload"];
// 2.创建一个POST请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 2.设置请求头(告诉服务器这次上传的是文件数据)
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",BWFileBoundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
// 3.设置请求体
NSMutableData *body = [NSMutableData data];

// 4.1文件参数
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(BWNewLine)];
NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"",filename];
[body appendData:BWEncode(disposition)];
[body appendData:BWEncode(BWNewLine)];

NSString *type = [NSString stringWithFormat:@"Content-Type: %@",mimeType];
[body appendData:BWEncode(type)];
[body appendData:BWEncode(BWNewLine)];

//具体内容
[body appendData:BWEncode(BWNewLine)];
[body appendData:fileData];
[body appendData:BWEncode(BWNewLine)];

// 4.2非文件参数(用户名参数)

[dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(BWNewLine)];

NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"",key];

[body appendData:BWEncode(disposition)];
[body appendData:BWEncode(BWNewLine)];

[body appendData:BWEncode(BWNewLine)];
[body appendData:BWEncode([obj description])];
[body appendData:BWEncode(BWNewLine)];

}];
// 4.3结束标记
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWFileBoundary)];
[body appendData:BWEncode(@"--")];
[body appendData:BWEncode(BWNewLine)];

request.HTTPBody = body;

// 5.发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@",dict);
}];
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: