Ios Obj-C中的HTTP多部分请求 开场白

Ios Obj-C中的HTTP多部分请求 开场白,ios,objective-c,http,afnetworking,Ios,Objective C,Http,Afnetworking,所以我正在制作android应用程序的iOS版本。所有的Web服务都已经设置好了,但是它们没有太多详细的文档,所以我选择从android代码中推断出来。除了一件小事--HTTP多部分请求之外,该项目已经完成 我需要什么 我需要实现一个从java到objective-c的web请求。这样做的目的是将图像和用户ID一起上载到服务器并获得响应。以下是相关的Java代码: HttpClient httpClient = new DefaultHttpClient(); HttpPost postRequ

所以我正在制作android应用程序的iOS版本。所有的Web服务都已经设置好了,但是它们没有太多详细的文档,所以我选择从android代码中推断出来。除了一件小事--HTTP多部分请求之外,该项目已经完成

我需要什么 我需要实现一个从
java
objective-c
的web请求。这样做的目的是将图像和用户ID一起上载到服务器并获得响应。以下是相关的Java代码:

HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest=new HttpPost(Constant.server_url+"usermain/Profileimagesave");
String fileName = String.format("File_%d.png",new Date().getTime());
ByteArrayBody bab = new ByteArrayBody(data, fileName);
            
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("file", bab);
reqEntity.addPart("WebID", new StringBody(SharedPreferenceSession.getValue(getApplicationContext(), "WebId")));
postRequest.setEntity(reqEntity);
我尝试的 我已经尝试了将近一周的时间来将这段代码模拟成
objective-c
。以下是我在接受培训后能够做到的:

[管理员职位:urlstr参数:无]
构造体WithBlock:^(id formData){
[formData appendPartWithFileData:imageData
名称:@“blahblah.jpg”
文件名:@“blahblah.jpg”
mimeType:@“image/jpeg”];
[formData appendPartWithFormData:[webid数据使用编码:NSUTF8StringEncoding]
名称:@“WebID”];
}
进展:零
成功:^(NSURLSessionTask*任务,id响应对象){
NSLog(@“响应:%@”,响应对象);
}
失败:^(NSURLSessionTask*操作,NSError*错误){
NSLog(@“%@,[error.userInfo objectForKey:JSONResponseSerializerWithDataKey]);
}];
我一直在尝试上述代码的许多变体,但由于我对多部分请求没有清晰的理解,我觉得我在兜圈子

我得到了什么 我从服务器收到一个500错误

PHP警告 复制(../UserData/ThumbPhotos/MOB274565CCM_20151230062220。):无法打开流:没有此类文件或目录 1773$login1=$login->LoginID
1774美元当前日期=日期(“YmdHis”)
1775$currentname=$webid.“\”+$curr\u date
1776
1777//echo“文件大小:”.$\u文件['file']['size']
1778$info=pathinfo($_FILES['file']['name'])
1779$ext=$info['extension']
1780$filename=“{$currentname}.{$ext}”
1781$sourcePath=$\u FILES['file']['tmp\u name']
1782$targetPath=“../UserData/ThumbPhotos/”$filename
1783$targetPath1=“../UserData/UserPhoto/”$filename
1784移动上传的文件($sourcePath,$targetPath)

1785份($targetPath,$targetPath1); 1786$userfiles=新用户文件
1787$userfiles->LoginID=$login1
1788$userfiles->FileActualName=$filename
1789$userfiles->FileTempName=$filename
1790$userfiles->ThumbImage=$filename
1791$userfiles->Type=“IMAGE”
1792$userfiles->ProfileImage=0
1793$userfiles->deletedStatus=0
1794$userfiles->UploadBy=$login1
1795$userfiles->UploadDate=date(“Y-m-d”)
1796$userfiles->deletedby=NULL
1797$userfiles->PasswordProtected=0

有什么可以帮忙的 我无法理解上面代码中的内容,因为我不太熟悉HTTP请求的功能。因此,任何可以帮助我理解这一点的东西都是受欢迎的,可能是工作代码示例,调试请求的提示
,或者对这些东西如何工作的评论

android代码运行良好。那么,我有没有办法检查android和iOS应用程序上的传出请求,并尝试通过试错来匹配它们


提前感谢

使用NSMutableURLRequest上载任何图像时,请尝试使用此选项

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:YOUR_URL]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];

NSMutableData *body = [NSMutableData data];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:_YOUR_IMAGE_DATA]];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"posttype\"\r\n\r\n%@", postType] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"postimgtext\"\r\n\r\n%@", postTextType] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userid\"\r\n\r\n%@", USER_ID] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];

NSError *error = nil;
NSURLResponse *response = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!error) {
     NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
     NSLog(@"response : %@", response);
}

请尝试使用NSMutableURLRequest上载任何图像

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:YOUR_URL]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];

NSMutableData *body = [NSMutableData data];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:_YOUR_IMAGE_DATA]];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"posttype\"\r\n\r\n%@", postType] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"postimgtext\"\r\n\r\n%@", postTextType] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userid\"\r\n\r\n%@", USER_ID] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];

NSError *error = nil;
NSURLResponse *response = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!error) {
     NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
     NSLog(@"response : %@", response);
}

我想建议你使用。 在这种情况下,您需要上传一些图像,因此我将为您提供相应的代码:

NSData *imageData = [NSData dataWithContentsOfFile:filename];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileData:imageData
                                name:@"files"
                            fileName:photoName mimeType:@"image/jpeg"];
[formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding]
                            name:@"key1"];

} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
NSData*imageData=[NSData dataWithContentsOfFile:filename];
AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager];
[manager POST:urlString参数:nil constructingBodyWithBlock:^(id formData){
[formData appendPartWithFileData:imageData
名称:@“文件”
文件名:photoName mimeType:@“image/jpeg”];
[formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding]
名称:@“key1”];
}成功:^(AFHTTPRequestOperation*操作,id响应对象){
NSLog(@“响应:%@”,响应对象);
}失败:^(AFHTTPRequestOperation*操作,NSError*错误){
NSLog(@“错误:%@”,错误);
}];

我建议您使用。 在这种情况下,您需要上传一些图像,因此我将为您提供相应的代码:

NSData *imageData = [NSData dataWithContentsOfFile:filename];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileData:imageData
                                name:@"files"
                            fileName:photoName mimeType:@"image/jpeg"];
[formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding]
                            name:@"key1"];

} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
NSData*imageData=[NSData dataWithContentsOfFile:filename];
AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager];
[manager POST:urlString参数:nil constructingBodyWithBlock:^(id formData){
[formData appendPartWithFileData:imageData
名称:@“文件”
文件名:photoName mimeType:@“image/jpeg”];
[formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding]
名称:@“key1”];
}成功:^(AFHTTPRequestOperation*操作,id响应对象){
NSLog(@“响应:%@”,响应对象);
}失败:^(AFHTTPRequestOperation*操作,NSError*错误){
NSLog(@“错误:%@”,错误);
}];

您有兴趣使用AFN网络吗?这可以节省一些代码和时间…@Stefan是的,当然。但是我不知道如何将java代码移植到obj cAre中,您是否有兴趣使用AFNetworking?这可以节省一些代码和时间…@Stefan是的,当然。但我不确定如何将java代码移植到obj cNo问题中。此代码将在服务器上上载一个图像。。。您可以附加更多图像。。