在做项目的时候, 我们会遇到用户头像上传至服务器的功能, 还有就是用户发表动态选择本地图片上传服务器的功能.但总归就一句话:就是把图片上传到服务器.
我这里是利用AFN第三方, 如果不打算利用三方的, 也可以自己试试写,其实很简单, 但我个人觉得AFN已经很强大了, 并且现在很多人都在用, 你也不妨利用AFN, 大牛的话一般都是直接自己敲的, 嘿嘿, 我还是一个小罗罗, 跟大牛不能比啊, 还有很长的一段路要走呢, 不说了, 小不点带大家看一下上传至服务器的步骤吧!
首先, 后台会给你一个上传图片到服务器的地址, 其次, 你需要根据拼接参数, 然后进行数据请求, 数据请求成功后, 服务器会返回来图片的地址, 你拿到地址后, 将图片再上传
下面看代码
- (void)upLoadImage {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 20;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", @"text/html", @"text/json", nil];
NSString *urlStr = [NSString stringWithFormat:@"%@/%@", kHomeDefaultUrl, kUploadImageUrl];
NSDictionary *dic = @{@"id":@"0"};
//根据当前系统时间生成图片名称
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy年MM月dd日"];
NSString *dateStr = [formatter stringFromDate:date];
_i = 0;
[manager POST:urlStr parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[self.hud hide:YES];
for (UIImage *image in _array) {
NSString *fileName = [NSString stringWithFormat:@"%@%ld.png",dateStr,_i];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
float size = imageData.length/1024.0/1024.0;
if (size>=1) {
imageData = UIImageJPEGRepresentation(image, 0.3);
}else{
imageData = UIImageJPEGRepresentation(image, 0.5);
}
[formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%ld",_i] fileName:fileName mimeType:@"image/jpeg"];
_i++;
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"上传成功");
NSDictionary *returnDic = [NSDictionary dictionaryWithDictionary:responseObject];
if ([[returnDic objectForKey:@"ac"] isEqualToString:@"success"]) {
NSDictionary *photoDic = [NSDictionary dictionaryWithDictionary:[returnDic objectForKey:@"photos"]];
NSLog(@"这里将你得到的图片地址拿到, 做接下来上传图片的步骤");
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上传失败");
}];
}
其中_array中我放的是图片, 你可以上传多张图片到服务器, 你如果上传多张图片,发现服务器返回的图片地址是一样的, 说明, 服务器名字写重了, 由于我们是以日期为名命名的, 在上传多张图片的时候容易写重, 毕竟服务器那边还分辨不了这么多, 你需要做的就是一张一张上传, 不要在上面的代码里循环, 要在外面循环呦!
你觉得怎么样呢? 欢迎多多指正呦!
// 转载请注明原地址呦!