多图片上传

本文深入探讨了多图片上传技术,并提供了一个实际应用案例。通过在CocoaChina上传的Demo基础上改进,实现了一个功能强大的图片上传系统。文章详细介绍了如何在提交按钮点击事件中进行图片判断与上传操作,包括图片的获取、处理和服务器端的上传流程。同时,针对图片存储和返回结果的处理进行了优化,确保了系统的高效性和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天写过一个用户头像上传的,今天写了一个多图片上传的,在项目中应该很常用。实在之前在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];

1
2

附最新demo地址:http://code.cocoachina.com/view/129451

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值