序幕
因此,我正在制作一个Android应用的iOS版本。所有的Web服务都已经设置好了,但是它们没有太多详细的文档,因此我选择从android代码中进行推断。该项目已完成,除了一件小事-HTTP Multipart请求。
我需要的
我需要实现从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
。接受stefan's answer之后,我可以管理以下内容:[manager POST:urlstr parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> formData){
[formData appendPartWithFileData:imageData
name:@"blahblah.jpg"
fileName:@"blahblah.jpg"
mimeType:@"image/jpeg"];
[formData appendPartWithFormData:[webid dataUsingEncoding:NSUTF8StringEncoding]
name:@"WebID"];
}
progress:nil
success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"Response: %@", responseObject);
}
failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"%@",[error.userInfo objectForKey:JSONResponseSerializerWithDataKey]);
}];
我一直在尝试上述代码的多种变体,但是由于我对多部分请求没有清楚的了解,因此我觉得自己正在盘旋。
我得到了什么
我从服务器收到500错误。
PHP警告
复制(../UserData/ThumbPhotos/MOB274565CCM_20151230062220。):无法打开流:没有此类文件或目录
1773 $ login1 = $ login-> LoginID;
1774 $ curr_date = date(“ YmdHis”);
1775 $ currentname = $ webid。“ _”。+ $ curr_date;
1776年
1777 //;回声“ file size:”。$ _ FILES ['file'] ['size'];
1778 info
1779 $ ext = $ info ['extension'];
1780 $ filename =“ {$ currentname}。{$ ext}”;
1781 $ sourcePath = $ _FILES ['file'] ['tmp_name'];
1782 $ targetPath =“ ../ UserData / ThumbPhotos /".$ filename;
1783 $ targetPath1 =“ ../ UserData / UserPhoto //..$ filename;
1784 move
1785复制($ targetPath,$ targetPath1);
1786 $ userfiles =新的UserFiles;
1787 $ userfiles-> LoginID = $ login1;
1788 $ userfiles-> FileActualName = $ filename;
1789 $ userfiles-> FileTempName = $文件名;
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应用程序上的传出请求,并尝试通过反复试验将它们匹配起来?
提前致谢
最佳答案
我建议您使用AFNetworking。
在这种情况下,您要上传一些图像,因此我将为您提供代码:
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);
}];