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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
asp无组件上传类v0.98(无刷新ajax上传,可检查图片木马,支持多文件,utf-8版) 请将本程序放到你的虚拟主机上运行,如果本地有iis也可以。有些同学有简易iis服务器,不适用本程序的,因为有部分中文字符不能识别导致无法运行。 如果需要上传单文件可以把index.htm中的multiple="multiple"删除掉,对应的多文件前端显示及处理需要您对upload.asp进行修改调整,然后前端ajax获取数据进行处理。 关于“无组件上传类 Version 0.96”修改摘要: '修改点 : v0.97 修复了一个错误。当用户在同一个file控件选择多个文件上传时file.add语句会出错, 2018-06-04 '   原因是键值冲突,本版本对键值做了唯一化处理。 ' v0.98 将Charset="gb2312" 改成Charset="utf-8",所有文件格式都改成utf8了 2018-8-11 ' 修改了在上传的时候检查图片是否被注入了代码,比如<% 、request 等关键字符 相关参数设置: 1.ajax_upload.asp中的参数设置说明: (1).SavePath 上传目录,默认为“uploadfiles”。 2.clsUpload.asp中的参数设置说明: (1).AllowFiles 所允许上传的文件格式,默认为"jpg,jpeg,gif,png"。 (2).MaxDownFileSize 允许上传的文件大小,默认30M,注意iis默认限制就几百k,您需要在iis那儿做设置,网站 - asp - 限制属性 - 最大请求实体主体限制,加上两个0,改成20000000,这样就改成20M了。 3.index.htm中的参数说明 在第27和32行,分别是判断类型和大小的,可手动修改。这里是前端检测文件类型和大小的,可减轻服务器工作。后端要等文件post完成才能开始检测,假设误选择了个几百兆的exe、rar等文件网页直接卡死。 提示:在clsUpload.asp的第134行对文件中可能存在的危险asp代码做了简单的检查,具体是判断是否包含“request”字符串,如果需要对其他代码判断可在此处修改。建议不要以判断<%、eval、%>这3个特殊字符串来确定图片木马,因为正常文件中可能也有,而且有些图马文件没有<%。 如果需要测试图片木马文件可以自己百度制作方法,按照教程做几个图片木马文件然后用本程序上传测试。 本程序由sysdzw提供。如有需技术支持可联系QQ:171977759 09:02 2018-08-13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值