问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

upload怎么封装 ios

发布网友 发布时间:2022-06-09 17:37

我来回答

1个回答

热心网友 时间:2024-11-29 05:48

1.设置请求头
* 目的:告诉服务器请求体里面的内容并非普通的参数,而是包含了文件参数
[request setValue:@"multipart/form-data; boundary=maljob" forHTTPHeaderField:@"Content-Type"];1

2.设置请求体
* 作用:存放参数(文件参数和非文件参数)
1> 非文件参数
[body appendData:MalJobEncode(@"--maljob\r\n")];
[body appendData:MalJobEncode(@"Content-Disposition: form-data; name=\"username\"\r\n")];12
[body appendData:MalJobEncode(@"\r\n")];
[body appendData:MalJobEncode(@"张三")];
[body appendData:MalJobEncode(@"\r\n")];123

2> 文件参数
[body appendData:MalJobEncode(@"--heima\r\n")];
[body appendData:MalJobEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"test123.png\"\r\n")];
[body appendData:MalJobEncode(@"Content-Type: image/png\r\n")];123
[body appendData:MalJobEncode(@"\r\n")];
[body appendData:imageData];
[body appendData:MalJobEncode(@"\r\n")];123

3> 结束标记 :参数结束的标记
[body appendData:MalJobEncode(@"--maljob--\r\n")];1

文件的MIMEType
1.百度搜索
2.查找服务器下面的某个xml文件
apache-tomcat-6.0.41\conf\web.xml1

3.加载文件时通过Reponse获得
- (NSString *)MIMEType:(NSURL *)url
{
// 1.创建一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 2.发送请求(返回响应)
NSURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
// 3.获得MIMEType
return response.MIMEType;
}12345678910

文件上传封装工具类
@interface UploadTool : NSObject

/**
* 根据文件路径获取文件的MIMEType
*
* @param url 文件路径
*
* @return 文件MIMEType
*/
- (NSString *)MIMEType:(NSURL *)url;

/**
* 根据文件名、MIMEType、二进制文件、其他的参数上传文件
*
* @param filename 文件名
* @param mimeType MIMEType
* @param fileData 二进制文件
* @param params 非文件的其他详细参数
*/
- (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params;

@end123456789101112131415161718192021222324
#define MJFileBoundary @"MalJob"
#define MJNewLine @"\r\n"
#define MJEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]

#import "UploadTool.h"

@implementation UploadTool

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

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

// 3.获得MIMEType
return response.MIMEType;
}

- (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params
{
// 1.请求路径
NSURL *url = [NSURL URLWithString:@"http://218.83.161.124:8080/job/upload"];

// 2.创建一个POST请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";

// 3.设置请求体
NSMutableData *body = [NSMutableData data];

// 3.1.文件参数
[body appendData:MJEncode(@"--")];
[body appendData:MJEncode(MJFileBoundary)];
[body appendData:MJEncode(MJNewLine)];

NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"", filename];
[body appendData:MJEncode(disposition)];
[body appendData:MJEncode(MJNewLine)];

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

[body appendData:MJEncode(MJNewLine)];
[body appendData:fileData];
[body appendData:MJEncode(MJNewLine)];

// 3.2.非文件参数
[params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[body appendData:MJEncode(@"--")];
[body appendData:MJEncode(MJFileBoundary)];
[body appendData:MJEncode(MJNewLine)];

NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", key];
[body appendData:MJEncode(disposition)];
[body appendData:MJEncode(MJNewLine)];

[body appendData:MJEncode(MJNewLine)];
[body appendData:MJEncode([obj description])];
[body appendData:MJEncode(MJNewLine)];
}];

// 3.3.结束标记
[body appendData:MJEncode(@"--")];
[body appendData:MJEncode(MJFileBoundary)];
[body appendData:MJEncode(@"--")];
[body appendData:MJEncode(MJNewLine)];

request.HTTPBody = body;

// 4.设置请求头(告诉服务器这次传给你的是文件数据,告诉服务器现在发送的是一个文件上传请求)
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", MJFileBoundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];

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

- (void)upload
{
// 非文件的其他详细参数
NSDictionary *params = @{
@"" : @"",
@"" : @"",
};
NSURL *url = [[NSBundle mainBundle] URLForResource:@"filename" withExtension:@"txt"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *MIMEType = [self MIMEType:url];
[self upload:@"filename.txt" mimeType:MIMEType fileData:data params:params];
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在波兰的签证率高不高 去波兰如何办签证 去波兰办签证好办理吗 波兰签证好签吗 win7 多重网络 教师资格证普通话要多少级 想考教师资格证普通话必须过几级 qq影视会员SVIP和超级影视VIP的区别在哪里? 一小撮怎么造句 盛行一时怎么造句 你的世界满满的都是他,而我的世界满满的都是你 我的世界两个人一起刷怪经验为什么都是他的? 我的世界里百分之90都是他,可他的世界只有百分之30是我,有时候想想去撞... 我太爱我男朋友了疯了一样 我的世界都只有他了怎么办他经常逃避我怎么办... 能匠是做洗鞋的吗? win7快捷键的写字板 有没有专售洗鞋机的厂家? 现在有制造洗鞋机的厂?在哪?我想与他谈我的小发明…… 女生,希望能改变自己的性格 为什么女性学艺术的居多,而出名的艺术家大多是男性? 双鱼座女有这艺术家气质的忧郁男吸引到你了吗? 斯柯达斑马系统升级不读取CarPlay怎么解决 推测这个女生什么性格?会不会比较冷。 男生们,你们讨厌什么性格的女生? 艺术家都有哪些独特的气质和性格? 艺术型是不是有很多种?你们喜欢艺术家性格的人一起吗?但听说艺术家性格... 艺术家有什么性格特征? 对孕妇来讲吃亚麻籽油比深海鱼油要好吗? 分公司上报总公司人员组织机构图用写人名吗? CAD图纸中(建筑消防图纸)方框内MK是什么意思 高手帮忙解释下 有插图... ...他现在去其它城市工作了,一直以来我的世界就只有他,现在却很少联系... ns383.tmp是什么进程? 怎么样才能让我不把全部精力放男朋友身上呢??感觉我的世界全是他。 我的世界:MC界最弱的生物,就是它了,谁都打不过 我的世界的玩家都知道Notch是我的世界的创始人,但他也是网易的一名工作... 绿茶冲泡的最佳温度是多少度?如果温度过高会怎么样? 佳能6d相机带wifi 和gps吗 带的话怎么使用 高手们赐教 我家电梯如何不用钥匙扣就能用 电梯钥匙扣不用了,能删除吗 奔驰钥匙用什么钥匙扣不会划伤钥匙 小区钥匙扣不用了还能用这个扣配别的小区钥匙扣吗? 逸动plus钥匙怎么上钥匙扣?不要钥匙套,后盖推开也弄不进去呀! 物业有权力禁用钥匙扣么? 物业服务不到位,达不到三级标准。没见交物业... 汽车无钥匙启动系统,为什么还是要插钥匙? 大家都用车钥匙扣吗 美国人用钥匙扣吗 水壶上面的钥匙扣干嘛用的?可不可以拿掉? 谁知道“99中国北京钱币博览会镀金熊猫加字纪念银币”现在市场收购价格... 岁岁常舒意+所爱长相伴什么意思 讨价还价英语