美文网首页iOS开发
文件上传(原理)

文件上传(原理)

作者: zhazha | 来源:发表于2015-07-15 08:24 被阅读1099次

原始的方式实现文件上传

文件上传的步骤

  • 首先定义一些基本的宏,方便后面使用,因为这些代码实在恶心,不能出现任何差错
#define ZMJBoundary @"zmj"
#define ZMJEncode(string) [string dataUsingEncoding:NSUTF8StringEncoding]
#define ZMJNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]
  • 创建POST请求
NSURL *url = [NSURL URLWithString:@"www.baidu.com"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
  • 设置请求头(告诉告诉服务器,这是一个文件上传的请求)
[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", ZMJBoundary] forHTTPHeaderField:@"Content-Type"];
  • 设置请求体
    • 先创建一个空的请求体
NSMutableData *body = [NSMutableData data];
- 如果是文件参数,必须严格按照以下格式
```
--分割线\r\n

Content-Disposition: form-data; name="参数名"; filename="文件名"\r\n
Content-Type: 文件的MIMEType\r\n
\r\n
文件数据
\r\n

```
```objc
// 实现代码

 // 分割线
[body appendData:ZMJEncode(@"--")];
[body appendData:ZMJEncode(ZMJBoundary)];
[body appendData:ZMJNewLine];

// 文件参数名
[body appendData:ZMJEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"test.png\""])];
[body appendData:ZMJNewLine];

// 文件的类型
[body appendData:ZMJEncode([NSString stringWithFormat:@"Content-Type: image/png"])];
[body appendData:ZMJNewLine];

// 文件数据
[body appendData:ZMJNewLine];
UIImage *image = [UIImage imageNamed:@"placeholder"];
[body appendData:UIImagePNGRepresentation(image)];
// [body appendData:[NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/test.png"]];
[body appendData:ZMJNewLine];
```
- 如果是非文件参数,同样必须遵守以下格式
```
 --分割线\r\n
 Content-Disposition: form-data; name="参数名"\r\n
 \r\n
 参数值
 \r\n
```
```objc
// 非文件参数代码实现

 // 分割线
[body appendData:ZMJEncode(@"--")];
[body appendData:ZMJEncode(ZMJBoundary)];
[body appendData:ZMJNewLine];

// 参数名
[body appendData:ZMJEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name=\"username\""])];
[body appendData:ZMJNewLine];

// 参数值
[body appendData:ZMJNewLine];
[body appendData:ZMJEncode(@"jack")];
[body appendData:ZMJNewLine];

```
- 最后,添加结束标记,必须遵守格式
```
--分割线--\r\n

```
```objc
// 结束标记代码实现

[body appendData:ZMJEncode(@"--")];
[body appendData:ZMJEncode(ZMJBoundary)];
[body appendData:ZMJEncode(@"--")];
[body appendData:ZMJNewLine];
```
- 设置请求体
```objc
request.HTTPBody = body;
```
  • 利用NSURLConnection类发送异步请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
    }];

相关文章

  • java web文件上传

    什么是文件上传 为什么使用文件上传 文件上传原理分析 上传文件注意事项 1,请求方式必须是post. 2,需要使用...

  • 文件上传+解析漏洞

    原理:文件上传漏洞是指在需要上传文件的地方没有对上传的文件的格式进行过滤限制,从而导致恶意用户上传恶意文件,get...

  • Web笔记-上传下载

    文件的上传 文件上传的条件和原理 文件上传页面书写必须符合以下条件: Form表单的请求方式必须为post For...

  • 上传漏洞防御

    参考文章防范原理控制用户上传,不能上传脚本文件;控制文件读取,不让文件执行。 限制上传后缀检查上传后缀,通过白名单...

  • 文件上传(原理)

    原始的方式实现文件上传 文件上传的步骤 首先定义一些基本的宏,方便后面使用,因为这些代码实在恶心,不能出现任何差错...

  • 文件上传原理

    原文地址:https://xz.aliyun.com/t/6357 1. 文件上传漏洞 1.1 漏洞简介 ​ 文件...

  • 04-文件上传,加密进阶

    一、文件上传 经常有人咨询上传文件的原理,并且反馈第三方框架 AFNetworking 在处理有些文件上传时无法胜...

  • 图片文件上传

    上传文件原理 上传文件,就是将文件从浏览器端传到服务器端; 上传文件,必须使用 标记来向服务器端发数据...

  • 文件上传漏洞

    文件上传漏洞原理文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶...

  • NSURLSession上传的基本用法

    NSURLSession上传文件 (一)上传单个文件的过程及原理总结 1.上传文件需要注意两点 第一点 : 请求头...

网友评论

    本文标题:文件上传(原理)

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