afn post请求上传文件_iOS利用AFNetworking(AFN) 实现图片上传

1.上传图片以二进制流的形式上传

1 #pragma

mark - 文件上传

2 - (IBAction)uploadImage

3 {

4

10     // 1.

httpClient->url

11

12     // 2.

上传请求POST

13     NSURLRequest

*request = [_httpClient multipartFormRequestWithMethod:@"POST"

path:@"upload.php" parameters:nil constructingBodyWithBlock:^(id

formData) {

14

//

在此位置生成一个要上传的数据体

15

//

form对应的是html文件中的表单

16

17

18

UIImage *image = [UIImage

imageNamed:@"头像1"];

19

NSData *data =

UIImagePNGRepresentation(image);

20

21

//

在网络开发中,上传文件时,是文件不允许被覆盖,文件重名

22

// 要解决此问题,

23

//

可以在上传时使用当前的系统事件作为文件名

24

NSDateFormatter *formatter =

[[NSDateFormatter alloc] init];

25

// 设置时间格式

26

formatter.dateFormat =

@"yyyyMMddHHmmss";

27

NSString *str = [formatter

stringFromDate:[NSDate date]];

28

NSString *fileName =

[NSString stringWithFormat:@"%@.png", str];

29

30

31

38

[formData

appendPartWithFileData:data name:@"file" fileName:fileName

mimeType:@"image/png"];

39

}];//file改为后台接收的字段或参数

40

41     // 3.

operation包装的urlconnetion

42

AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc]

initWithRequest:request];

43

44     [op

setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,

id responseObject) {

45

NSLog(@"上传完成");

46     }

failure:^(AFHTTPRequestOperation *operation, NSError *error)

{

47

NSLog(@"上传失败->%@", error);

48

}];

49

50

//执行

51

[_httpClient.operationQueue addOperation:op];

当要上传多张图片时只需在multipartFormRequestWithMethod方法上添加这些代码就好

AFNetWorking使用multipartFormRequestWithMethod方法上传多张图片问题

int i=0;

NSMutableURLRequest *request = [[AFNetWorkSingleton

shareInstance] multipartFormRequestWithMethod:@"POST"

path:@"Mindex/getimg" parameters:nil

constructingBodyWithBlock:^(idformData){

for(UIImage

*eachImage in array)

{

NSData *imageData =

UIImageJPEGRepresentation(eachImage,0.5);

[formData appendPartWithFileData:imageData

name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString

stringWithFormat:@"abc%d.jpg",i ]

mimeType:@"image/jpeg"];//file改为后台接收的字段或参数

i++;

}

}];

2.上传图片以二进制流的字符串的形式上传

-(void)postPhotosToShare_API23_withPid:(NSString *)_pid

andUid:(NSString *)_uid andScore:(float)_score andContent:(NSString

*)_content andAnonymous:(NSString *)_anonymous

andImgArray:(NSMutableArray *)_imgArray

{

path =

@"interface/product.php/product/";//path为网站开发人员告知的除去IP后的地址

NSURL *baseUrl1 = [NSURL

URLWithString:urlIP];//urlIP为网站开发人员告知的IP地址,例:http://192..168.1.1

httpClient =

[[AFHTTPClient alloc]initWithBaseURL:baseUrl1];

NSMutableDictionary

*parameters = [[NSMutableDictionary alloc]init];

[parameters setObject:_pid

forKey:@"pid"];

[parameters setObject:_uid

forKey:@"uid"];

[parameters

setObject:[NSString stringWithFormat:@"%f",_score]

forKey:@"score"];

[parameters

setObject:_content forKey:@"content"];

[parameters

setObject:_anonymous forKey:@"anonymous"];

if

(_imgArray.count!=0)

{

int imgCount=0;

for (UIImage *myImg in _imgArray)

{

NSData

*imageData = UIImageJPEGRepresentation(myImg,0.7);//进行图片压缩

NSString

*_encodedImageStr = [imageData base64Encoding];//进行64位转码转为字符串

[parameters setObject:_encodedImageStr forKey:[NSString

stringWithFormat:@"img[%i]",imgCount]];//进行img[%i]改为后台接收的字段或参数

imgCount

++;

}

}

request = [httpClient

requestWithMethod:@"POST" path:path parameters:parameters];

[request

setTimeoutInterval:kDataExpiryTime];//设置请求时间

[AFJSONRequestOperation

addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

AFJSONRequestOperation

*operation = [[AFJSONRequestOperation

alloc]initWithRequest:request];

[operation

setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,

id responseObject) {

NSDictionary *json = [NSJSONSerialization

JSONObjectWithData:operation.responseData

options:NSJSONReadingMutableContainers error:nil];

[self getResultSuccess:json

withTage:Get_API_Tag_23];//对api进行标记,可要可不要

}

failure:^(AFHTTPRequestOperation *operation, NSError *error) {

[self getResultFailed:error];

}];

[operation start];

}

AFNetworking是一个基于Objective-C语言的iOS网络请求框架,它提供了一系列方便的API,帮助开发者快速地进行网络请求并处理响应内容。其原理是基于NSURLConnection和NSURLSession建立的网络请求,通过对网络请求的封装,提供了比原生API更加便捷的操作方式。 常用操作包括: 1. 发起网络请求:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的GET、POST等方法,可以方便地发起网络请求。 2. 设置请求参数:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的setParameterEncoding方法或AFHTTPRequestSerializer类的setQueryStringSerializationWithStyle方法,可以设置请求参数的编码格式。 3. 设置请求头:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的setValue:forHTTPHeaderField方法,可以设置请求头信息。 4. 处理响应数据:使用AFHTTPRequestOperation类的completionBlock或AFHTTPSessionManager类的dataTaskWithRequest:completionHandler方法,可以处理请求响应数据。 5. 下载文件:使用AFHTTPRequestOperation类的setDownloadProgressBlock和setCompletionBlockWithSuccess方法或AFHTTPSessionManager类的downloadTaskWithRequest:progress:destination:completionHandler方法,可以实现文件下载功能。 6. 上传文件:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的POST方法和AFHTTPRequestSerializer类的multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock方法,可以实现文件上传功能。 总体来说,AFNetworking提供了丰富的API和良好的封装,使得iOS开发者能够更加方便地进行网络请求和处理响应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值