前几天写过一个用户头像上传的,今天写了一个多图片上传的,在项目中应该很常用。实在之前在CocoaChina 上传过的一个demo的基础上写的,大家可以先去下看下,后面会把最新的demo上传。(http://code.cocoachina.com/view/129301)
(2016.08.29)之前demo中关于相机调用崩溃问题以及两种方式混合选图做了新处理,已上传到cocoachina 附地址:http://code.cocoachina.com/view/132653
在之前demo的基础上导入AFNetworking 库。其余直接上代码,在提交按钮的点击事件中先做了个判断是否进行上传
- (void) optionRightButtonAction {
//将界面中的信息提交到服务器
if (self.photoView.photoMenuItems.count == 0) {
[self.view makeToast:@"没有照片选择"];
return;
}else
{
//上传到服务器
NSLog(@"%@",self.photoView.photoMenuItems);
[self ImageArrayLoad];
}
}
下面是调用处理图片的方法 相册所选图片信息全部储存在 self.photoView.photoMenuItems 数组中。 但是必须先转成UIimage类型的。
//上传图片
-(void)ImageArrayLoad
{
//http://www.aichengxu.com/view/55607
for (int i =0; i<self.photoView.photoMenuItems.count; i++) {
//这里必须转成图片格式
CGImageRef thum = [self.photoView.photoMenuItems[i] thumbnail];
image = [UIImage imageWithCGImage:thum];
[imageArray addObject:image];
}
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
for (int i = 0; i<imageArray.count; i++) {
NSData *data = UIImagePNGRepresentation(imageArray[i]);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];
[manager POST:@"你的服务端地址" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:data name:@"Filedata" fileName:fileName mimeType:@"image/jpg"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
NSString * str = [responseObject objectForKey:@"fileId"];
if (str != nil) {
[self UpImaheFinish:str];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
}
-(void)UpImaheFinish:(NSString *)string
{
if (string) {
//添加到数组
[imageArr addObject:string];
}
//是否全部传完
if (imageArr.count == imageArray.count) {
NSLog(@"%@",imageArr);
//返回的所有结果
}
}
我这边后台是要一张返回一个字符,之后拼接在一起的。 所以在这里的处理可能给我回不一样。
这里是判断所有图片全部上传成功后进行的操作。
if (imageArr.count == imageArray.count) {
NSLog(@"%@",imageArr);
//返回的所有结果
}
这里需要注意的是,若没有退出页面。 在本页面第二次提交照片的时候需要先清空上次储存图片信息的数组。
在所有照片上传结束后执行即可。
[self.photoView.photoMenuItems removeAllObjects];
[imageArr removeAllObjects];
附最新demo地址:http://code.cocoachina.com/view/129451