序幕

因此,我正在制作一个Android应用的iOS版本。所有的Web服务都已经设置好了,但是它们没有太多详细的文档,因此我选择从android代码中进行推断。该项目已完成,除了一件小事-HTTP Multipart请求。

我需要的

我需要实现从javaobjective-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);
}];

10-07 23:41