zoukankan      html  css  js  c++  java
  • NSURLConnection实现文件上传和AFNetworking实现文件上传

    请求的步骤分为4步

    1、创建请求

    2、设置请求头(告诉服务器这是一个文件上传的请求)

    3、设置请求体

    4、发送请求

    NSURLConnection实现文件上传

    // 1、创建请求
        NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/upload"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
        
        // 2、设置请求头(告诉服务器这是一个文件上传的请求)
        [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",XMGEncode(@"520it")] forHTTPHeaderField:@"Content-Type"];
        
        // 3、设置请求体
        // 开始标记
        NSMutableData *body = [NSMutableData data];
        [body appendData:XMGEncode(@"--")];
        [body appendData:XMGEncode(@"520it")];
        [body appendData:XMGNewLine];
        
        // 文件参数
        // 参数名和文件名
        [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name="file"; filename="test.png""])];
        [body appendData:XMGNewLine];
        // 文件类型
        [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Type: image/png"])];
        [body appendData:XMGNewLine];
        // 文件数据
        [body appendData:XMGNewLine];
        UIImage *img = [UIImage imageNamed:@"1"];
        [body appendData:UIImagePNGRepresentation(img)];
        [body appendData:XMGNewLine];
        
        // 非文件参数
        [body appendData:XMGEncode(@"--")];
        [body appendData:XMGEncode(@"520it")];
        [body appendData:XMGNewLine];
        // 参数名
        [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name="username""])];
        [body appendData:XMGNewLine];
        // 参数值
        [body appendData:XMGNewLine];
        [body appendData:XMGEncode(@"jack")];
        [body appendData:XMGNewLine];
        
        // 结束标记
        [body appendData:XMGEncode(@"--")];
        [body appendData:XMGEncode(@"520it")];
        [body appendData:XMGEncode(@"--")];
        [body appendData:XMGNewLine];
        
        request.HTTPBody = body;
        
        // 4、链接服务器发送请求
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
        }];

    AFNetworking实现文件上传

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        [manager POST:@"http://120.25.226.186:32812/upload" parameters:@{@"username" : @"jack"} constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            // 在这个block中设置需要上传的文件
            //            NSData *data = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/placeholder.png"];
            //            [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];
            
            //            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" error:nil];
    
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            //
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            //
        }];
     
  • 相关阅读:
    关于python的类成员方法允许静态调用的机制
    一个pyqt5动态加载ui+多线程+信号刷新界面的例子
    一个经典的redis队列简单解决方案
    关于连表查询的执行计划
    electron nativefier打包网址 electron-winstaller制作安装包
    MySQL 8.0 字符串比较特殊案例小结
    MySQL SELECT_LEX与subselect 执行 源码阅读笔记
    MySQL 8.0 QueryResolver 源码笔记
    MySQL 8.0 Optimizer 源码笔记
    MySQL Item 源码阅读笔记
  • 原文地址:https://www.cnblogs.com/xs514521/p/5780534.html
Copyright © 2011-2022 走看看