iOS上传语音、文字、图片

需求:用户可能提交 文字,也可能有语音,还有可能有图片。当然 都有也是可以的。
在这里我的方案是 先做判断(因为我提交的类不同(也就是方法不一样));
    (1)if (_imageArray.count == 0 && recordingInterval == 0){
  //只有文字
}else{

    // 文字 图片 加录音
}

方法:

// 有文字,有图,片有语音
+(void)askTextImageByUserInfoId:(NSString *)userInfoId
                WithUserRelationId:(NSString *)userRelationId
                 WithAskContent:(NSString *)askContent
             WithImageDataArray:(NSMutableArray *)imageDataArray
                  WithVoiceData:(NSData *)voiceData
                        success:(void (^)(id askDescArray))success
                        failure:(void (^)(NSError *error))failure`

具体实现:


/**
 *  请求Opinion Server Api 接口方法
 *
 *  @param request 自定义的Request请求
 *  @param userInfoId 对应人的唯一标示(用户本人  和  关系人)
 *  @param token token值
 *  @param imageAndVoiceDataArray  盛放图片 语音的数组
 *  @param success 请求成功,返回Response对象
 *  @param failure 请求失败
 *  @param cached  是否进行缓存
 */
+ (void)requestWithPOST:(NetWorkBaseRequest *)request WithImageDataArray:(NSMutableArray *)imageDataArray WithVoiceData:(NSData *)voiceData success:(void (^)(NetWorkBaseResponse *responseObject))success
                failure:(void (^)(NSError *error))failure
                  cache:(BOOL)cached
{

    if (!request) {
        NSLog(@"[ERROR] request cannot be NULL");
        if (failure) {

            failure([NSError errorWithDomain:@"" code:-1 userInfo:nil]);
        }
        return;
    }

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    [manager.requestSerializer setValue:@"multipart/form-data;charset=utf-8"forHTTPHeaderField:@"Content-Type"];

    manager.requestSerializer.timeoutInterval = 10;
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager.requestSerializer setCachePolicy:NSURLRequestReturnCacheDataElseLoad];

    NSString *tokenValue = [SSKeychain passwordForService:[AppUtils appServiceName] account:[AppUtils tokenKey]];
    if (!tokenValue) {

        tokenValue = @"";
    }else{

        [request.paramDic setValue:tokenValue forKey:@"token"];
    }

    [manager POST:request.stringOfApiURLString parameters:request.paramDic constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //对传进来的 图片  数组进行遍历
        for (int i = 0; i < imageDataArray.count; i++) {

            NSData *imgData = imageDataArray[i];

            //用这个当图片的名字,一起到图片名不重复的效果
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            NSString *tupianming = [NSString stringWithFormat:@"yyyyMMddHHmmssSSSS%d",i];
            [dateFormatter setDateFormat:tupianming];
            NSString *pictname;
            NSString *picFileName;
            pictname = [NSString stringWithFormat:@"/%@.jpg",[dateFormatter stringFromDate:[NSDate date]]];
            picFileName = [NSString stringWithFormat:@"/%@file",[dateFormatter stringFromDate:[NSDate date]]];

            [formData appendPartWithFileData:imgData name:picFileName fileName:[NSString stringWithFormat:@"%@",pictname] mimeType:@"image/jpg"];
        }
        if(voiceData!=nil){

            //用这个当图片的名字,起到图片名不重复的效果
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            NSString *tupianming = [NSString stringWithFormat:@"yyyyMMddHHmmssSSSS%@",@"luyin"];
            [dateFormatter setDateFormat:tupianming];
            NSString *luyinname;
            NSString *luyinFileName;
            luyinname = [NSString stringWithFormat:@"/%@.amr",[dateFormatter stringFromDate:[NSDate date]]];
            //让服务器识别这个音频的格式 为  amr
            luyinFileName = [NSString stringWithFormat:@"/%@.amr",[dateFormatter stringFromDate:[NSDate date]]];

            [formData appendPartWithFileData:voiceData name:luyinname fileName:luyinFileName mimeType:@"audio/amr"];

        }

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

        NSDictionary *dic = responseObject;//operation.request.cachePolicy

        if (dic){

            @try{
                //解决若是json格式出错崩溃问题,判断status=0为成功
                NSString *responseClassName =  [NetWorkUtil replaceCharacter:@"Request" withString:@"Response" inString:NSStringFromClass([request class])];
                NetWorkBaseResponse *response = [[NSClassFromString(responseClassName) alloc] initWithDictionary:dic];
                if (response && success) {

                    success(response);

                }else{
                    failure([NSError errorWithDomain:@"接口出错" code:-1 userInfo:nil]);
                }
            }@catch(NSException *exception) {
                failure([NSError errorWithDomain:@"接口返回数据格式出错" code:-1 userInfo:nil]);
            }
        }
        else if (failure){
            failure([NSError errorWithDomain:@"接口出错" code:-1 userInfo:nil]);
        }else{
            NSLog(@"[ERROR] failure not exist!");
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error);
    }];

}
时间: 2024-11-13 10:39:44

iOS上传语音、文字、图片的相关文章

dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术:HTML5的api,作为一名前端的菜鸟,没什么可说的,直接分享自己学习的资料: 关于HTML5 的这些新的特性大家可以到Mozilla的开发者社区MDN https://developer.mozilla.org/zh-CN/ 上查HTML5的资料 还有就是发掘到的比较牛逼的一篇博客:http:/

IOS上传头像

//1   ASI post传图片 NSURL *url=[NSURL URLWithString:[BASEURL stringByAppendingString:@"/user/post_face.php"]]; ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url]; request.delegate=self; request.timeOutSeconds=120; [email protected

与安卓交互的上传图片 与 上传语音、视频

1.与安卓语音的交互 注意:获取语音的src 需要用DOM元素获取 (1)HTML (点击按钮告诉安卓,录音开始与结束) <span class="voice" onclick="voicecli()">上传语音</span> (2)JS //点击语音 function voicecli() { $('.addPicture').hide(); $('.expaddVoice').show(); //调方法 //判断调安卓方法显示或隐藏语音

ueditor使用-图片上传正常,图片显示异常404

做个小项目,用到了ueditor,其中需要在ueditor中上传图片. 问题症状: 点击上传图片的按钮后选择图片,上传到了目的文件夹,但是显示不了,f12查看也是404.后来发觉显示图片时路径不对. 解决方案: 翻看官网文档,找到了个博客:http://popozhu.github.io/2014/07/03/ueditor%E5%9B%BE%E7%89%87%E4%B8%8A%E4%BC%A0%E8%B7%AF%E5%BE%84%E9%85%8D%E7%BD%AE/ 说的还蛮详细.找了下原因,

MVC使用JCrop上传、裁剪图片

JCrop用来裁剪图片,本篇想体验的是: 在视图页上传图片: 上传成功,跳转到另外一个编辑视图页,使用JCrop对该图片裁剪,并保存图片到指定文件夹: 裁剪成功后,在主视图页显示裁剪图片: 当然,实际项目中最有可能的做法是:在本页上传.裁剪并保存. □ 思路 →在上传图片视图页,把图片上传保存到一个临时文件夹Upload→在编辑裁剪视图页,点击"裁剪"按钮,把JCrop能提供的参数,比如宽度.高度.离顶部距离,离底部距离,离左右端距离等封装成类,传递给控制器方法→控制器方法根据接收到的

关于同时上传多个图片的类(有点粗糙)

<?phpclass Upload{    private $doc;            //文件    private $docsize;        //文件大小    private $docname;        //文件名字    private $doctype;        //文件类型    private $docnewname;    //图片新名字    private $allowtype;        //可以上传的文件类型    private $sete

cisco设备IOS上传、备份、设置启动IOS

注:在使用cisco设备上传下载中,必须使用TFTP协议,所以,需要知道需要一根网线和电脑,电脑上需要开启TFTP服务(可以在网上下载相关的TFTP软件),网线连接cisco设备的网口和电脑,并且确保电脑和cisco设备在同一个网段内.可以相互ping通 IOS备份: R#copy flash:XXX.bin tftp:192.168.0.2(电脑的IP地址)     //将需要备份的IOS复制到相应的电脑上 Address or name of remote hos []? 192.168.0

实现ios上传加密nodejs后台解密

今天在做项目的时候遇到一个问题,我需要在ios端把上传数据加密,防止中间代理捕获信息内容并修改数据库的信息.把数据传到后台在解码,实现数据安全. 下面介绍我实现的在nodejs的加密和解密的代码希望对需要解决相同问题的有一定的帮助. var assert = require('assert');    var crypto = require('crypto');     function test_des(param) {     var key = new Buffer(param.key)

使用FormData上传文件、图片

关于FormData XMLHttpRequest Level 2添加了一个新的接口  ---- FormData 利用FormData对象,可以通过js用一些键值对来模拟一系列表单控件,可以使用XMLHttpRequest的 send( ) 方法来异步提交表单 与普通的ajax相比,使用FormData的最大优点就是可以异步上传二进制文件 FormData对象 FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台. 在使用ajax提交时,使用