IOS AFNetWorking 附件上传

这篇博客介绍了如何在iOS应用中使用AFNetworking库来实现文件上传。首先,通过路径获取文件名,然后将文件转换为二进制数据。接着,构造HTTP请求体,设置文件类型和边界,同时添加其他表单参数。最后,使用AFAppDotNetAPIClient发起POST请求,将构造好的数据作为请求体的一部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研究了好多天终于实现了afnetWork 上传zip文件到服务器的操作,主要分两部分1、组织报文体 2、发起请求。
具体代码如下:

首先由传进来的参数去获取文件名:


NSString *fNameValue = [[filePath pathComponents]lastObject];

NSString *nameValue = [fNameValue stringByDeletingPathExtension];


将传入的文件变为二进制:


NSData *imageData = [NSDatadataWithContentsOfFile:filePath];


组织http request body 的内容:


NSString *stringBoundary = @"----WebKitFormBoundarygTijO0scBddIKz8T";//body 不同边界的标识

NSMutableData *postBody = [[NSMutableData allocinit];

[postBody appendData:[[NSString stringWithFormat:@"\r\n\r\n--%@\r\n",

                          stringBoundary]dataUsingEncoding:NSUTF8StringEncoding]];  //  设置开始标识

[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="file";

        filename="%@"\r\n",fNameValue]dataUsingEncoding:NSUTF8StringEncoding]];   //相当于web表单的file域

NSString *contentFileType =[NSStringstringWithFormat:@"Content-Type: %@\r\n\r\n",fileType];

[postBody appendData:[contentFileTypedataUsingEncoding:NSUTF8StringEncoding]][postBody appendData:imageData];

NSString *hhh_date =[NSString stringWithFormat:@"\r\n--%@\r\n", stringBoundary];  //第二段标识

[postBody appendData:[hhh_datedataUsingEncoding:NSUTF8StringEncoding]];

[postBody appendData:[@"Content-Disposition: form-data;      

                name="timestamp"\r\n\r\n"dataUsingEncoding:NSUTF8StringEncoding]];

[postBody appendData:[@"0.38387341564521194"dataUsingEncoding:NSUTF8StringEncoding]];

//设置表单的其他参数

NSArray *array =[parame allKeys];

for (NSString *key in array) {

 [postBody appendData:[hhh_datedataUsingEncoding:NSUTF8StringEncoding]];

NSString *ContentDisposition =[NSStringstringWithFormat:@"Content-Disposition: form-data;

            name="%@"\r\n\r\n",key];

[postBody appendData:[ContentDispositiondataUsingEncoding:NSUTF8StringEncoding]];

NSString *valueStr = [NSStringstringWithFormat:@"%@",[parame objectForKey:key]];

[postBody appendData:[valueStrdataUsingEncoding:NSUTF8StringEncoding]];

}

[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",

                stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];


 ----end body 数据准备完毕

     

发起POST 请求:


AFAppDotNetAPIClient *httpClient = [AFAppDotNetAPIClient sharedClient];

NSURLSessionDataTask *task = [httpClient POST:url parameters:nil

                constructingBodyWithBlock:^(id<<span style="color: #3c828c">AFMultipartFormData> formData) {

[formData appendPartWithFileData:postBody name:nameValue fileName:fNameValue

                            mimeType:fileType];

success:^(NSURLSessionDataTask *task, id responseObject) {

if (completBlock) {

  completBlock(responseObject,nil);

}

failure:^(NSURLSessionDataTask *task, NSError *error) {

if (completBlock) {

   completBlock(nil,error);

}

}];

return task;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值