zoukankan      html  css  js  c++  java
  • iOS 基于第三方AFNetworking多上传图片 上传语音

    之前项目要做上传方面的,也有研究过图片上传方面的一些知识,用AFNetworking中AFHTTPSessionManager类进行图片的POST请求

    //上传图片

    +(void)postDataWithUrl:(NSString *)url params:(NSMutableDictionary *)params imageDatas:(NSArray *)images success:(void (^)(id response))success failure:(void (^)(NSError *error))failure

    {

            AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

            manager.responseSerializer = [AFJSONResponseSerializer serializer];

            [manager.responseSerializer setAcceptableContentTypes:[NSSet       setWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/xml",nil]];

            

            [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

                for (UIImage *image in images) {

                    // 图片太大会上传不到服务器上面去

                    NSData *imageData = UIImageJPEGRepresentation(image, 0.1);;

                    // 在网络开发中,上传文件时,是文件不允许被覆盖,文件重名

                    // 要解决此问题,

                    // 可以在上传时使用当前的系统事件作为文件名

                    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

                    // 设置时间格式

                    formatter.dateFormat = @"yyyyMMddHHmmss";

                    NSString *str = [formatter stringFromDate:[NSDate date]];

                    NSString *fileName = [NSString stringWithFormat:@"%@.png", str];

                    

                    /*

                     此方法参数

                     1. 要上传的[二进制数据]

                     2. 对应网站上[upload.php中]处理文件的[字段"file"]

                     3. 要保存在服务器上的[文件名]

                     4. 上传文件的[mimeType]

                     */

                    [formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/png"];

                }

            } progress:^(NSProgress * _Nonnull uploadProgress) {

                 NSLog(@"uploadProgress = %@",uploadProgress);

            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

                success(responseObject);

            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

                failure(error);

            }];

    }

    // 上传语音

    +(void)POSTOneAmrWithUrl:(NSString *)url imageWithName:(NSString *)fileName AmrDatas:(NSData *)amr success:(void (^)(id response))success failure:(void (^)(NSError *error))failure

    {

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        manager.responseSerializer = [AFJSONResponseSerializer serializer];

        [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/xml",nil]];

        

        [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

                   

            [formData appendPartWithFileData:amr name:@"file" fileName: [NSString stringWithFormat:@"%@.amr", fileName] mimeType:@"amr/mp3/wmr"];

        } progress:^(NSProgress * _Nonnull uploadProgress) {

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            success(responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            failure(error);

        }];

    }

  • 相关阅读:
    javascript的字段值,私有变量,静态方法声明
    取得序列中某个点的范围边界
    使用wubi安装ubuntu11.04后无线网卡被禁用无法打开解决办法
    WEB前端性能优化
    jQuery的arrayLike
    在手机上安装BT5系统,没错就是破解无线密码的那个
    PHP在子类方法B调用父类的方法A时,不传参数时仍能得到方法B的名称
    讨厌的文本选区
    PHP遍历解析XML为一个数组
    “软工厂代码生成工具”的学习笔记
  • 原文地址:https://www.cnblogs.com/zhangjiong/p/5977245.html
Copyright © 2011-2022 走看看