NSURLSession如何上传图片的同时带有参数

2024-06-18 21:58

本文主要是介绍NSURLSession如何上传图片的同时带有参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

好久没有写过博客了,之前一直在小公司做搬运工。现在幡然醒悟开始做些研究性的东西吧。nsurlsession是AFNetworking3.0优化以后才引起我的注意的。这次从头写起,就是把请求这块从零开始熟悉熟悉。好了,开始说说我写的思路。之前都是用AFHTTPRequestOperationManager做请求的接口封装,今天封装的时候也是仿照它做的NSURLSession。

既然是参数和图片同一个接口使用。首先将需要的参数封装成一个字典作为参数传入封装的类。

其实这里并没有太大的难点,就是遇到的数据成功以后返回的NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject不知道是什么东东。以至于浪费了好久才将数据转换成字符串和字典。

-(void)uploadImages:(NSArray *)imageArray type:(NetworkRequestType)type info:(NSDictionary *)requestInfo andBlock:(void (^)(NSString* result, NSError *error))block

{

    NSString *urlString = nil;

    switch (type) {

        case JsonNet_Register:

        {

            urlString = [self setParameter:requestInfo withBaseUrl:[NSString stringWithFormat:@"%@appRegister/register",Main_Domain]];

        }break;

            

        default:

            break;

    }

    

    urlString = [[NSString stringWithFormat:@"%@",urlString] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    configuration.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyAlways;

    configuration.HTTPShouldSetCookies = YES;

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

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

    [manager.requestSerializer setTimeoutInterval:30];

    

    //公参

/*这里是我们项目要求的公用参数*/

    NSDictionary *clientDic =@{@"userId":(userId?userId:@""),@"device":version,@"ip":ipStr,@"country":(countryStr?countryStr:@""),@"language":languageStr,@"Resolution":Resolution,@"osType":@"0",@"token":(netToken?netToken:@""),@"currentTime":reqTime};

    //将公参和个参合成一个字典

    NSDictionary *parameters = [self setParameters:clientDic withCurrentDic:requestInfo];

    

    

    [manager POST:urlString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData_Nonnull formData) {

//使用for循环将多张图片作为文件上传到自己的服务器

        for (int i = 0; i < [imageArray count]; ++i) 

        {

            NSString *imageKey = [NSString stringWithFormat:@"headIcon"];

            UIImage *image = [imageArray objectAtIndex:i];

            NSData *data = UIImageJPEGRepresentation(image,1.0);

            [formData appendPartWithFileData :data name:imageKey fileName:[NSString stringWithFormat:@"image%d.png",i+1] mimeType:@"multipart/form-data"];

        }

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

/*这里就是浪费我好久时间的地方*/

        NSString *serilizationString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        block(serilizationString,nil);

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

        block(nil,error);

    }];

}


这篇关于NSURLSession如何上传图片的同时带有参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073165

相关文章

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

GitLab文件的上传与下载方式

《GitLab文件的上传与下载方式》:本文主要介绍GitLab文件的上传与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录GitLab 项目拉取到本地GitLab 项目上传方法方法 1:本地项目未初始化Git方法 2:本地项目已初始化GitGitLab 上

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

Java实现MinIO文件上传的加解密操作

《Java实现MinIO文件上传的加解密操作》在云存储场景中,数据安全是核心需求之一,MinIO作为高性能对象存储服务,支持通过客户端加密(CSE)在数据上传前完成加密,下面我们来看看如何通过Java... 目录一、背景与需求二、技术选型与原理1. 加密方案对比2. 核心算法选择三、完整代码实现1. 加密上

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第