POST上传各种数据类型(包括图片)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/50914384

1.上传事件:

- (void)postUpLoad {

// 1. url

NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/post/upload.php"];

// 2. post请求

/*

参数1:上传到服务器的地址

参数2:上传文件的全路径(可以上传图片,也可以上传其他类型数据,因为最后上传的都是二进制数据流)

参数3:保存到服务器的文件名

     */

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url andLoaclFilePath:[[NSBundle mainBundle] pathForResource:@"001.png" ofType:nil] andFileName:@"123456.png"];

// 3. 连接

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

// 反序列化处理

id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];

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

    }];

}

 result);    }];

NSMutalbeURLRequest分类:

/**

 url: 要上传的服务器的地址

 loaclFilePath: 要上传的文件的全路径

 fileName:保存到服务器的文件名

 */

+ (instancetype)requestWithURL:(NSURL *)url andLoaclFilePath:(NSString *)loaclFilePath andFileName:(NSString *)fileName;

方法的实现:

/**随便的字符串作为分隔符*/

static NSString *boundary = @"itcastupload";

@implementation NSMutableURLRequest (Multipart)

+ (instancetype)requestWithURL:(NSURL *)url andLoaclFilePath:(NSString *)loaclFilePath andFileName:(NSString *)fileName

{

// 2. post请求

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f];

// 2.1 指定post方法

    request.HTTPMethod = @"POST";

// 2.2 拼接数据体

NSMutableData *dataM = [NSMutableData data];

//   1. \r\n--(可以随便写, 但是不能有中文)\r\n

NSString *str = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary];

    [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

//   2. Content-Disposition: form-data; name="userfile(php脚本中用来读取文件的字段)"; filename="demo.json(要保存到服务器的文件名)"

    str = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\" \r\n", fileName];

    [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

//   3. Content-Type: application/octet-stream(上传文件的类型)\r\n\r\n

    str = @"Content-Type: application/octet-stream\r\n\r\n";

    [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

//   4. 要上传的文件的二进制流

// 要上传图片的二进制

    [dataM appendData:[NSData dataWithContentsOfFile:loaclFilePath]];

//   5. \r\n--(可以随便写, 但是不能有中文)--\r\n

    str = [NSString stringWithFormat:@"\r\n--%@--\r\n", boundary];

    [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

// 2.4 设置请求体

    request.HTTPBody = dataM;

// 设置请求头

//    Content-Length(文件的大小) 290

//    Content-Type multipart/form-data; boundary(分隔符)=(可以随便写, 但是不能有中文)

NSString *headerStr = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];

    [request setValue:headerStr forHTTPHeaderField:@"Content-Type"];

return request;

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈满iOS

iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

例如,很多人习惯在keyWindow上添加一个自定义浮层视图,但是,当自己或者其它第三方框架曾经调高过其它自定义UIWindow属性windowLevel,或者...

8061
来自专栏DannyHoo的专栏

NSURLConnection被放弃之后使用NSURLSession

NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username...

842
来自专栏coding...

Objective-c 多线程操作 自定义NSOperation 模拟下载写在前面效果分析代码DEMO地址

使用多线程下载图片,使用内存缓存和磁盘缓存。 这里只为理解NSOperation及其派生类 真要应用到APP中 请下载成熟的第三方库

1286
来自专栏逍遥剑客的游戏开发

Nebula3学习笔记(6): IO实战, ZIP解压缩程序

1385
来自专栏哈雷彗星撞地球

(译)openURL 在 iOS10中已弃用

翻译自:openURL Deprecated in iOS10 译者:Haley_Wong

1011
来自专栏君赏技术博客

【已解决】Xcode在StoryBoard设置UIView的控件类是Cocoapods的类,运行还是UIView?

ZHVerifyCodeFiled作为我写在Cocoapods的空间,现在我在测试例子的Main.storyboard直接添加一个UIView使用我们Cocoa...

1722
来自专栏Alice

iOS afnetworking最新版报错 没有AFHTTPRequestOperationManager类了

今天开了一个小项目   用的是pod   然后  安装好 Afnetworking之后   发现 AFHTTPRequestOperationManager  ...

5889
来自专栏一直在跳坑然后爬坑

Flutter “跳转页面”(一)

“跳转页面”为啥加双引号,其实所谓的跳转页面可能和以前认识的不太一样。因为在Flutter里,所有能看到的东西一般都是widget,但是,没有说那个app是由一...

2843
来自专栏『不羁阁』 | 行走少年郎专栏

iOS网络--HTTP请求HTTP请求

1868
来自专栏DannyHoo的专栏

单独设置UIView的坐标x或y或width或height

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

921

扫码关注云+社区

领取腾讯云代金券