ios开发之使用多文件上传的简单封装最原始的

//
//  ViewController.m
//  18-上传多个文件
//
//  Created by 鲁军 on 2021/2/13.
//#import "ViewController.h"
#import "HMUploadFiles.h"
@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.
}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{NSString *path1=[[NSBundle mainBundle] pathForResource:@"01.jpg" ofType:nil];NSString *path2=[[NSBundle mainBundle] pathForResource:@"02.jpg" ofType:nil];NSString *path3=[[NSBundle mainBundle] pathForResource:@"03.jpg" ofType:nil];NSArray *arrayPaths = @[path1,path2,path3];NSDictionary *params=@{@"username":@"zhangsan"};//[self upLoadFiles:@"http://localhost:8080/MJServer/" fieldName:@"userfile[]" filePaths:arrayPaths params:params];[HMUploadFiles upLoadFiles:@"http://localhost:8080/MJServer/" fieldName:@"userfile[]" filePaths:arrayPaths params:params];}@end
//
//  HMUploadFiles.h
//  18-上传多个文件
//
//  Created by 鲁军 on 2021/2/13.
//#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface HMUploadFiles : NSObject
+(void)upLoadFile:(NSString *)urlString fieldName:(NSString *)fieldNamefilePath:(NSString *)filePath;+(void)upLoadFile:(NSString *)urlString fieldName:(NSString *)fieldNamefilePath:(NSString *)filePath params:(NSDictionary *)params;+(void)upLoadFiles:(NSString *)urlString fieldName:(NSString *)fieldNamefilePaths:(NSArray *)filePaths params:(NSDictionary *)params;
@endNS_ASSUME_NONNULL_END
//
//  HMUploadFiles.m
//  18-上传多个文件
//
//  Created by 鲁军 on 2021/2/13.
//#import "HMUploadFiles.h"
#define kBOUNDARY @"abc"
@implementation HMUploadFiles+(void)upLoadFile:(NSString *)urlString fieldName:(NSString *)fieldNamefilePath:(NSString *)filePath{[self upLoadFile:urlString fieldName:fieldName filePath:filePath params:nil];
}+(void)upLoadFile:(NSString *)urlString fieldName:(NSString *)fieldNamefilePath:(NSString *)filePath params:(NSDictionary *)params{[self upLoadFiles:urlString fieldName:fieldName filePaths:@[filePath] params:params];}+(void)upLoadFiles:(NSString *)urlString fieldName:(NSString *)fieldNamefilePaths:(NSArray *)filePaths params:(NSDictionary *)params{NSURL *url = [NSURL URLWithString:urlString];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod=@"post";[request setValue:[NSString stringWithFormat:@"multipart/form-data;boundary=%@",kBOUNDARY] forHTTPHeaderField:@"Content-Type"];request.HTTPBody = [self makeBody:fieldName filePaths:filePaths params:params];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {if(connectionError){NSLog(@"连接错误 %@",connectionError);return;}NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;if(httpResponse.statusCode==200||httpResponse.statusCode==304){//解析数据id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];NSLog(@"%@",json);}else{NSLog(@"服务器内部错误");}}];}+(NSData *)makeBody:(NSString *)fieldNamefilePaths:(NSArray *)filePaths params:(NSDictionary *)params{NSMutableData *mData = [NSMutableData data];//拚文件[filePaths enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {NSMutableString *mString = [NSMutableString string];if(idx==0){[mString appendFormat:@"--%@\r\n",kBOUNDARY];}else{[mString appendFormat:@"\r\n--%@\r\n",kBOUNDARY];}[mString appendFormat:@"Content-Disposition: form-data; name=\"%@\";filename=\"%@\"\r\n",fieldName,[obj lastPathComponent]];[mString appendString:@"Content-Type: application/octet-stream\r\n"];[mString appendString:@"\r\n"];[mData appendData:[mString dataUsingEncoding:NSUTF8StringEncoding]];//加载文件NSData *data = [NSData dataWithContentsOfFile:obj];[mData appendData:data];}];// 拼字符串[params enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {NSMutableString *mString = [NSMutableString string];[mString appendFormat:@"\r\n--%@\r\n",kBOUNDARY];[mString appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",key];[mString appendString:@"\r\n"];[mString appendFormat:@"%@",obj];[mData appendData:[mString dataUsingEncoding:NSUTF8StringEncoding]];}];//3 结束NSString *end = [NSString stringWithFormat:@"\r\n--%@--",kBOUNDARY];[mData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];return mData.copy;
}
@end

ios开发之使用多文件上传的简单封装最原始的相关推荐

  1. IOS开发基础之单文件上传基础最原始的方式

    IOS开发基础之单文件上传基础最原始的方式 info.plist 加入一行代码 <key>NSAppTransportSecurity</key><dict>< ...

  2. iOS开发网络篇 一一 文件上传

    下面使用两种方式来实现iOS网络中的文件上传. 注意: 文件上传要发送POST请求 使用 NSURLConnection 来实现 文件上传 使用 NSURLSession 来实现 文件上传 这两种方式 ...

  3. linux禁止客户端上传文件_图片/文件上传如此简单|macOS 图床客户端 uPic

    前言 相信很多人在写作(特别是需要多平台发布)的时候都会因为插图而增加工作量: 平台图片外链不允许在网站外部访问. 使用云图床服务上传流程复杂. 那么这些问题有没有办法解决呢,答案肯定是"有 ...

  4. 简述php中文件上传过程,简单php文件上传详细说明

    关于文件上传我们讲了很多,这只是一款最基本的简单的文件上传功能,同时本教程也介绍了关于上传的原理以及各种函数的使用与file的参数说明,以及php.ihi设置上传文件大小配置等. 1  如果实现小文件 ...

  5. php 上传文件简单实例,php文件上传的简单实例

    复制代码 代码如下: if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES[& ...

  6. jQuery.filer文件上传插件简单使用

    官网文档 这里贴出使用该插件上传多图片的demo,后端使用python flask. demo 前端 demo.html <!DOCTYPE html> <html lang=&qu ...

  7. 阿里云oss文件上传(简单上传、服务端签名后直传)

    前置: 自行开通阿里oss服务: https://www.aliyun.com/product/oss?spm=a2c4g.11174283.J_8058803260.125.d9387da2TjNf ...

  8. 大文件上传NeatUpload简单用法 (转)

    一般10M以下的文件上传通过设置Web.Config,再用VS2005自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了,这时可以用NeatUpload来上传 ...

  9. php单文件上传实例,php封装的单文件(图片)上传类完整实例

    本文实例讲述了php封装的单文件(图片)上传类.分享给大家供大家参考,具体如下: //封装php中的单文件(图片)上传类 /* //参数1:$file 文件数组 5个属性值 name,type,siz ...

最新文章

  1. 豪取4个SOTA,谷歌魔改Transformer登NeurIPS 2021!一层8个token比1024个还好用
  2. 四川大学java试题_四川大学2013年计算机(软件)学院Java语言程序设计期末考试试题B卷...
  3. 4*4矩阵按键控制数码管显示0-F
  4. wxWidgets:wxSlider类用法
  5. 多租户以及基于多租户的数据库设计需求
  6. Go http client 连接池不复用的问题
  7. lua的一些api文档总结吧
  8. Abp连接多个数据源
  9. nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底
  10. 谁“玩死了”共享单车?
  11. MAC下ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  12. 把二叉树打印成多行(C++)
  13. 分布式锁的原理和实现详解
  14. 革新科技CIDE-EDA:实验1 3-8译码器
  15. 聊聊如何申请技术专利
  16. 28天高效突击大礼包:微服务+分布式+框架,java开发spark视频
  17. javascript_JSON.parse() 与 JSON.stringify()_ZHOU125disorder_
  18. php 给视频打水印,如何给视频加表情 给视频局部画面加动态图片或水印
  19. 华为、百度这些大公司都青睐哪些编程语言呢?
  20. PostgreSQL WHEN others THEN

热门文章

  1. 高等数学与python高级应用_python高级应用程序与设计
  2. vuecli打包后的dist目录无法访问_听说很多人都不会打包,教你Python实现前端自动化打包部署!...
  3. 我一个女孩子居然做了十年硬件。​。。
  4. 程序员新动向!大龄困惑详解!
  5. PID算法搞不懂?看这篇文章就够了。
  6. linux有没有递归函数,递归函数
  7. java有var吗_java – Var和Var之间的区别
  8. 目前最常用的计算机机箱类型为_绍兴承接离心风机箱高品质
  9. 将一个datetime的now转换为只有日期的_不要眨眼!中英文、大小写转换,一秒就搞定!
  10. logging 日志输出乱码 info_接口自动化测试中logging实际用法