一、什么是PUT请求

PUT请求是请求服务器存储一个资源,并用Request-URI作为其标识,跟POST类似,但不常用,PUT请求比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

二、POST和PUT的请求根本区别

有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一个资源。这些观点都只看到了风格,争论起来也只是争论哪种风格更好,其实,用PUT还是POST,不是看这是创建还是更新资源的动作,这不是风格的问题,而是语义的问题。在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别。

三、在代码中如何应用

我们先来看看AFNetworking中PUT和POST方法怎么用:

//POST方法

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString

parameters:(nullable id)parameters

constructingBodyWithBlock:(nullable void (^)(id formData))block

progress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress

success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

//PUT方法

- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString

parameters:(nullable id)parameters

success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success

failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

发现参数中只有URLString和parameters,相对于POST请求来说少了一个formData的参数,没有地方把数据拼接上去,我曾经尝试把Data放到parameters中并不好用,在网上搜索了很多也没找到合适的解决办法,只能换一种方式了。

四、解决办法

在用AFNetworking进行PUT请求不好用之后,我想过是否用通过系统NSURLSessionTask来实现PUT请求,但是想想自己写太麻烦了,就尝试着用ASIHTTPRequest来尝试一下,发现ASIHTTPRequest还是很好用的

下面贴出代码:

- (void)uploadData:(NSData *)data uploadUrl:(NSString *)uploadUrl {

ASIHTTPRequest * fileUpRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:uploadUrl]];

fileUpRequest.delegate = self;

//设置请求超时时间为60秒

[fileUpRequest setTimeOutSeconds:60.f];

//设置请求超时时间后再次尝试请求的次数

[fileUpRequest setNumberOfTimesToRetryOnTimeout:2];

//将data拼接进去

[fileUpRequest appendPostData:data];

//设置请求方式为PUT

[fileUpRequest setRequestMethod:@"PUT"];

//设置上传失败的回调方法

[fileUpRequest setDidFailSelector:@selector(uploadFailed:)];

//设置上传成功的回调方法

[fileUpRequest setDidFinishSelector:@selector(uploadFinished:)];

//显示精确的上传进度

fileUpRequest.showAccurateProgress = YES;

//开始异步请求

[fileUpRequest startAsynchronous];

}

总结

到这里我的问题已经解决,以上就是这篇文章的全部内容了,希望本文的内容对各位iOS开发者们能有所帮助,如果有疑问大家可以留言交流。

axios中put的参数怎么传_iOS开发之如何通过PUT请求上传数据相关推荐

  1. ckeditor 图片上传_开发问题:Django使用ckeditor上传到七牛云

    介绍 最近正在使用Django开发一个项目,有一个需求是需要在后台,使用富文本编辑器,去自定义一些内容.会涉及到图片的上传.我准备把上传的内容存储到七牛里面,不想放在服务器上面.碰到一些问题,总结一下 ...

  2. Android中使用retrofit2进行网络get请求查询数据和post请求上传文件

    场景 Retrofit2 Retrofit 是对 OkHttp 的封装,是主流的网络框架. 适用于Android 和 Java 的类型安全的HTTP客户端,由Square提供的. Retrofit是一 ...

  3. elementui中同时上传多个文件_2019-12-19 element-ui文件上传 一次请求上传多个文件...

    最近在做项目的时候有一个需求,需要导入word文档,并且需要支持多选.element-ui 的 upload 组件支持多选文件,只需要配置参数 multiple 为 true 即可.但是这个组件默认会 ...

  4. 【报错笔记】在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录。

    在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录. 我使用UUID生成8级目录,在webapp下创建目录,将图片传进 ...

  5. php文件上传并保存路径到数据库,thinkphp表单上传文件并将文件路径保存到数据库中?...

    上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` (  `id` int(11) ...

  6. uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器(H5上传-微信小程序上传)

    前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能. 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseI ...

  7. 大文件分片上传前端框架_js实现大文件分片上传的方法

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  8. php多图上传插件ios,yii2组件之多图上传插件FileInput的详细使用

    作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  9. java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载

    1.  前言 这个章节是Struts2框架应用最广泛的三个版块(上传下载.国际化.校验输入)之一,所以这一版块的学习还蛮重要的. 2.  具体内容 2.1Struts2文件上传 2.1.1单文件上传 ...

最新文章

  1. 自动化网络拓扑 包容多设备类型——湖南省高速公路邵怀高速公路建设开发有限公司...
  2. linux内核的中断上下文,Linux操作系统中中断上下文中的互斥
  3. 广义平稳随机过程定义_广义平稳随机过程全解.ppt
  4. twitter mysql_twitter-mysql改进点
  5. 机器学习实战9-运行Tensorflow(california_housing数据集)
  6. Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
  7. mysql导入 内存溢出_Solr Dataimporthandler 导入MySQL 内存溢出。
  8. 三位数除以两位数竖式计算没有余数_北京版二年级数学下册第一单元有余数的除法练习题【都有电子版】...
  9. 油猴脚本(Tampermonkey)的安装和使用小结
  10. java获取oracle自增_Oracle自增列创建方法
  11. [转贴][教学] 教你如何打飞机 ^_^
  12. 用计算机怎么谈黑人团队,光遇黑人抬棺乐谱怎么弹奏 计算机演奏乐谱16
  13. python爬虫企业工商信息_Python 爬虫进阶必备 | 企业信用公示系统公告加密解析...
  14. 华为Mate S发布:余承东说要在圣诞季和三星、苹果正面开战---ESM
  15. 实现变色TextView及ViewPager指示器(原来可以这么简单)
  16. 读懂Wi-Fi 6:看这本白皮书就够了!(附全文下载)
  17. 在线考试视频学习平台
  18. (转自zee的原创)OATS 正交表测试策略
  19. 从零开始搭建一个HTTPS网站
  20. 存档修改 html,3ds存档修改图文教程【利用SaveDataFiler】

热门文章

  1. arcgis中制作出行od图_arcgis制作坡度图
  2. 打败你的十五个坏习惯
  3. 基于人工蜂群算法的线性规划求解matlab程序
  4. SSO(Single Sign On)系列(一)--SSO简介
  5. 电信宽带100M,平时只有30一40M而且常常掉线这是怎么回事?
  6. UVa 12112 - Iceman
  7. 常用电脑硬件检测工具下载
  8. 定向光流直方图是什么_OpenCV计算机视觉编程攻略(第3版)
  9. QT QDateTime获取当前时间且分出年月日时分秒
  10. 用互联网思想武装自己---雷军