面试:ios 批量上传图片

这几天面试,被问到关于GCD的用法,想了想,之前项目好像确实用的比较少,只是知道怎么用,有思路,但是却从来没有试过,回来之后,就尝试写了下:

封装图片上传的方法

/**批量上传图片*/
+ (NSURLSessionUploadTask*)uploadTaskWithImage:(UIImage*)image completion:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionBlock {
    // 构造 NSURLRequest
    NSError* error = NULL;
    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[NSString stringWithFormat:@"%@%@",JHTestUrl,JHPostImageFileURL] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        NSData* imageData = UIImageJPEGRepresentation(image, 1.0);
        [formData appendPartWithFileData:imageData name:@"file1" fileName:@"someFileName.png" mimeType:@"image/png"];
    } error:&error];
    // 将 NSURLRequest 与 completionBlock 包装为 NSURLSessionUploadTask
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
    } completionHandler:completionBlock];
    return uploadTask;
}

GCD方法监听每张图片的上传进度

/**
 *  批量上传图片的处理方法(GCD)
 *
 *  @param images     要上传的图片数组
 *  @param completion 上传完成之后的正确返回路径
 */
+(void)uploadImagesWithImages:(NSArray <UIImage *>*)images completion:(void(^)(NSMutableArray *successResultPath))completion{
    // 准备保存结果的数组,元素个数与上传的图片个数相同,先用 NSNull 占位
    NSMutableArray* result = [NSMutableArray array];
    for (NSInteger i = 0; i<images.count; i++) {
        [result addObject:[NSNull null]];
    }
    dispatch_group_t group = dispatch_group_create();
    for (NSInteger i = 0; i < images.count; i++) {
        dispatch_group_enter(group);
        NSURLSessionUploadTask* uploadTask = [self uploadTaskWithImage:images[i] completion:^(NSURLResponse *response, NSDictionary* responseObject, NSError *error) {
            if (error) {
                //NSLog(@"第 %d 张图片上传失败: %@", (int)i + 1, error);
                dispatch_group_leave(group);
            } else {
               // NSLog(@"第 %d 张图片上传成功: %@", (int)i + 1, responseObject);
                @synchronized (result) {
                /**NSMutableArray 是线程不安全的,所以加个同步锁*/
                    result[i] = responseObject;
                }
                dispatch_group_leave(group);
            }
        }];
        [uploadTask resume];
    }
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        if (completion) {
            completion(result);
        }
    });
}

原文地址:https://www.cnblogs.com/henusyj-1314/p/9803454.html

时间: 2024-08-29 21:03:54

面试:ios 批量上传图片的相关文章

iOS 批量上传图片的 3 种方法

AFNetworking 在去年年底升级到了 3.0.这个版本更新想必有很多好处,然而让我吃惊的是,它并没有 batch request 接口.之前的 1.x 版本.2.x 版本都实现了这个很常见的需求,不知道作者为何选择在 3.x 中去掉它. 在 AFNetworking 2 中,我们只需一行代码就能解决批量上传的问题: [AFURLConnectionOperation batchOfRequestOperations:operations progressBlock:^(NSUIntege

php批量上传图片并把图片名放入数据库

    前几天工作中要做这样一个功能,有八百多个系统 生成的会员:给这八百多个系统会员上传图片:然后把图片名放入数据库. 第一步: 第一步肯定是首先把图片上传到对应的图片目录下,直接用框架中已经有的上传类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!--?php                try {                     $upload=new Upload();       

-Android -线程池 批量上传图片 -附php接收代码

(出处:http://www.cnblogs.com/linguanh/) 目录: 1,前序 2,类特点 3,用法 4,java代码 5,php代码 1,前序 还是源于重构,看着之前为赶时间写着的碎片化的代码,甚是悲剧,臃肿且长,其实重构也是一个提高的过程,重构过程中会接触到更多的知识点.至少,我现在意识到,那怕是听过.有这样的意识而没真正动过手都是不行的,多线程并发最好使用线程池而不要一味地 new Thread(...).start().下面我分享个自己刚写好的图片批量上传类,顺带serve

关于django批量上传图片

本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说,1:我每次只能在后台存一张到数据库,2:在前台展示的时候我直接可以循环这一个字段来展示我的图片 那么这就涉及到一个列表跟数据循环存储的东西了 用到字典是因为我每张图片还有各自的图片描述,这两个信息时同时提交跟保存的.我把图片保存的url跟他的描述做成列表,然后再循环保存就搞定了. 这里主要用到的就

ASP.net(C#)批量上传图片(完整版)

摘自:http://www.biye5u.com/article/netsite/ASPNET/2010/1996.html 这篇关于ASP.Net批量上传图片的文章写得非常好,偶尔在网上看到想转载到这里,却费劲了周折.为了更新这篇文章,我用了近半个小时,网上的转载都残缺不全,希望大家有用的参考一下,作者写的非常好. 因本网站上传图片的需要,参考很多成熟的经验,在ASP.net平台上使用C#语言,做了这一自动批量上传图片的.ASPX文件,并经调试成功,在本网站上使用,现发出来供大家参考,也希望高

ckeditor添加自定义按钮整合swfupload实现批量上传图片

ckeditor添加自定义按钮整合swfupload实现批量上传图片给ckeditor添加自定义按钮,由于ckeditor只能上传一张图片,如果要上传多张图片就要结合ckfinder,而ckfinder是收费的,所以就想通过自定义按钮整合swfupload实现一次上传多张图片的功能首先下载并安装ckeditor.下载swfupload解压拷贝到对应的文件目录下3.自定义工具栏按钮:我们可以自定义ckeditor工具栏要显示的按钮,工具栏按钮定义可以参考这里.现在我们需要向工具栏添加一个自定义功能

ecshop编辑器FCKeditor修改成KindEditor编辑批量上传图片

ecshop一直使用的编辑器是fck,这个不用多说,相信很多朋友用的很悲剧吧,特别是图片不能批量上传图片. 今天小编就分享一下怎么换掉fck,放上实用的kindeditor,最新ecshop版本的哦.方法如下: 1.官方网站下载最新版kindeditor 现在最先版本的是:kindeditor4.1.4,官方网址:http://www.kindsoft.net 2.上传解压 上传下载的压缩文件到你的网站include目录下,解压kindeditor4.1.4,将其文件夹名称改为:kindedit

.Net ajax异步批量上传图片

利用iframe实现ajax异步批量上传图片,WebForm1页面 <form action="WebForm1.aspx" target="dynamic_creation_upload_iframe" method="post" enctype="multipart/form-data"> <input type="file" name="upload1" />

IOS批量截取视频截图 UIImage mp4 IOS Video

IOS批量截取视频截图 //生成截图 NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents"]; NSLog(@"path %@", path); for (int i = 0; i<[mItems count]; i++) { NSMutableDictionary *info = (NSMutableDictionary *)mItems[i]; //视频信息 NS