iOS中用系统提供的API能实现能实现文件的上传与下载,分别有两种方式。NSURLConnection与NSURLSession。
其中NSURLConnection是使用很久的的一种方式,NSURLSession是新出来的一种方式。
一、 POST方式上传
POST方式提交信息默认使用的是 :
*Content-Type: application/x-www-form-urlencoded.*输入中文时,post方式自动进行转义(苹果中自动).
国内的绝大多数网站都采用这种方式上传文件(支持二进制文件)
*Content-Type:multipart/form-data(上传文件)
*都会限制上传文件的大小一般是2M或者更小。
在苹果中进行上传操作十分麻烦。需要拼接好上传所需要的字符串格式,然后才能实现上传。(还要加上头部)
其他平台做的好一点的可能封装好了,不需要自己拼接字符串格式。因此iOS中很少用这种方式上传。
示例代码:
#import "XNUploadFile.h"
#define kTimeOut 5.0f
@implementation XNUploadFile
/** 分隔字符串 */
static NSString *boundaryStr = @"--";
/** 本次上传标示字符串 */
static NSString *randomIDStr;
/** 上传(php)脚本中,接收文件字段 */
static NSString *uploadID;
- (instancetype)init
{
self = [super init];
if (self) {
/** 本次上传标示字符串 */
randomIDStr = @"itcastupload";
/** 上传(php)脚本中,接收文件字段 */
// 可以咨询公司的网站开发程序员
// 或者用FireBug自己跟踪调试
uploadID = @"uploadFile";
}
return self;
}
#pragma mark - 成员方法. 用NSURLSession来完成上传
- (void)uploadFile:(NSString *)path fileName:(NSString *)fileName completion:(void (^)(NSString *string))completion
{
// 1. url 提示:真正负责文件上传的是php文件,而不是html文件
NSURL *url = [NSURL URLWithString:@"http://localhost/new/post/upload.php"];
// 2. request
NSURLRequest *request = [self requestForUploadURL:url uploadFileName:file