美文网首页IOS开发路上的故事
iOS 利用系统原生 NSURLConnection POST

iOS 利用系统原生 NSURLConnection POST

作者: 心情的颜色 | 来源:发表于2016-03-03 11:51 被阅读2606次

今天开始做头像上传模块,原本想偷懒用AFN第三方去做图片上传,可是不知道是因为参数还是后台,老是上传失败。无法只能自己写个很 Low的图片上传代码了,吐槽一下:兼职的后台还没有接口说明只有一个PostMan 测试插件的导出文件,他还经常不在线😡😡😡....苦逼的自己写吧。

如何上传那

根本没接触过啊?怎么办只能通过程序员的两件神器 google百度 通过一番痛苦的搜寻。

  1. 文件上传使用的时POST请求,通常把要上传的数据保存在请求体中,将图片编码到POST请求体(body)中,通过请求数据一起发送到服务器上。
  2. 在iOS开发中,图片上传的请求体非常难写,格式要求非常严格,出一点错误都会造成上传失败,或请求数据失败。
  3. 重要事情说三遍: 格式要求非常严格、格式要求非常严格、格式要求非常严格

下面我们先看一下格式:

文件上传请求数据格式.png
-- Boundary+72D4CD655314C423
Content-Disposition: form-data; name="uploadFile"; filename="001.png"
Content-Type:image/png
Content-Transfer-Encoding: binary
*空一行*
... contents of boris.png ...
--Boundary+72D4CD655314C423--

这是一个不带其他任务参数,body中只有一张图就要这样写

参数解释

//分割符号,以"--"开头,后边是自定义的分割表示符
-- Boundary+72D4CD655314C423  
//这里注明服务器接受图片的参数(服务器指定参数名称)及服务器上保存图片的文件名
Content-Disposition: form-data; name="file"; filename="001.png"   
//图片类型png或者jpeg
Content-Type:image/png
//编码方式(PS:一直没弄懂)
Content-Transfer-Encoding: binary
// 这里空一行,必须不可少!!(我就犯错在这,弄了一下午,注意:空一行、空一行、空一行)
*空一行*
// 图片数据部分
... contents of boris.png ...
//分割符号右面以"--"结尾,表面结束
--Boundary+72D4CD655314C423--

如果有其他表单数据,如传用户ID等参数,也要写成以上格式:

-Boundary+72D4CD655314C423
Content-Disposition: form-data; name="userId"
*空一行*
254
--Boundary+72D4CD655314C423
Content-Disposition: form-data; name="shopId"
*空一行* 
18718

具体参数含义与图片一致,一般这段会在图片上面,因此没有结尾符,如果没有其他数据了,那要加上结尾符。

Object - C 实现代码:

LSEncode#define LSEncode(str) [string dataUsingEncodeing:NSUTF8StringEncoding].

code.png

补充:

一定要检查好 结束语 \r\n有没有添加好,因为这个折腾了一下午😭😭😭

部分文化的MIMEType :


数据格式.png

相关文章

网友评论

  • miwer:我现在也是用AFN上传图片及参数, 结果后台参数图片都获取不到, 不知道什么原因? 楼主知道吗? 发份demo给我, 谢谢!! 971513280@qq.com
  • 会飞的鲱鱼:您好,有demo吗 ? 发我一份 wangyi0212@foxmail.com
    会飞的鲱鱼:请问 您的url 是什么样的格式?需要拼接参数吗?
  • 3d7898065f33:亲。可以发一份DEMO吗 我也在做这个
  • 507292774991:谢谢,不用了,我的问题已解决
  • 507292774991:LSEncode是什么意思
    心情的颜色:@落尘飘琳 你邮箱地址错了
    507292774991:你有demo 可以给我发一份吗,2183716042qq.com
    心情的颜色:@落尘飘琳 #define LSEncode(str) [string dataUsingEncodeing:NSUTF8StringEncoding] 自定义的define
  • 轻斟浅醉17:你好,有demo吗 ? 发我一份 3139726292@qq.com

本文标题:iOS 利用系统原生 NSURLConnection POST

本文链接:https://www.haomeiwen.com/subject/jrnnkttx.html