// 上传多文件 /* fileArr 文件名数组 */
- (void)uploadFileWithURL:(NSURL *)url fileArr:(NSArray*)fileArr {
/**
* post的上传文件,不同于普通的数据上传,
* 普通上传,只是将数据转换成二进制放置在请求体中,进行上传,有响应体得到结果。
* post上传,当上传文件是, 请求体中会多一部分东西, Content——Type,这是在请求体中必须要书写的,而且必须要书写正确,不能有一个标点符号的错误。负责就会请求不上去,或者出现请求的错误(无名的问题等)
* 其中在post 请求体中加入的格式有{1、边界 2、参数 3、换行 4、具体数据 5、换行 6、边界 7、换行 8、对象 9、结束符}
*/
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 设置请求头数据 。 boundary:边界
[request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryftnnT7s3iF7wV5q6" forHTTPHeaderField:@"Content-Type"];
// 给请求体加入固定格式数据
NSMutableData *data = [NSMutableData data];
/*******************设置文件参数***********************/
[fileArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// 设置边界 注:必须和请求头数据设置的边界 一样, 前面多两个“-”;(字符串 转 data 数据)
[data appendData:[@"------WebKitFormBoundaryftnnT7s3iF7wV5q6" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 设置传入数据的基本属性, 包括有 传入方式 data ,传入的类型(名称) ,传入的文件名, 。
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"",obj] dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 设置 内容的类型 “文件类型/扩展名” MIME中的
[data appendData:[@"Content-Type: file" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 加入数据内容
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 文件路径
NSString *path = [NSString stringWithFormat:@"%@/%@",[self createFilePathWithDocuments:@"Files"],obj];
NSData *fileData = [NSData dataWithContentsOfFile:path];
[data appendData:fileData];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 设置边界
[data appendData:[@"------WebKitFormBoundaryftnnT7s3iF7wV5q6" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
}];
/******************非文件参数***************************/
// 内容设置 , 设置传入的类型(名称)
[data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 传入的名称username = lxl
[data appendData:[@"lxl" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
// 退出边界
[data appendData:[@"------WebKitFormBoundaryftnnT7s3iF7wV5q6--" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
request.HTTPBody = data;
// 设置请求方式 post
request.HTTPMethod = @"POST";
// 连接服务器发送请求
UIActivityIndicatorView *activity = [self getActivityVC];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//服务器返回信息
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
NSData *jsonData = [result dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
}];
}