2016-11-04 76 views
1

个字节的数据,我这样做是为了在一个阵列将图像发送到服务器:AFNetworking 3个AFMultipartFormData获取响应

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:BaseURLString]]; 

    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 

    for(NSData *eachImage in self.fetchedAtt) { 
    [manager POST:string 
     parameters:nil 
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { 

    [formData appendPartWithFormData:eachImage 
           name:@"image1"]; 

} 

     progress:nil 
      success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

       if (responseObject != nil) 
       { 
        //NSDictionary *jsonDictionary = responseObject; 
        NSLog(@"%@",responseObject); 
       } 
      } 

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

       NSLog(@"%@",error.localizedDescription); 
      }]; 
    } 

现在我只发送一个图像来进行测试。它得到responseObject这是字节数据。

<696d6167 65313a20 efbfbdef bfbdefbf bdefbfbd 00104a46 49460001 01000048 00480000 efbfbdef bfbd0058 45786966 00004d4d 002a0000 00080002 01120003 00000001 00010000 efbfbd69 00040000 00010000 00260000 00000003 efbfbd01 00030000 00010001 0000efbf bd020004 00000001 0000001e efbfbd03...

根据网络家伙的反应应该是图像的网址。网络后端在ASP.NET我做错了什么?

UPDATE
如果我改变响应串行我得到:

Request failed: unacceptable content-type: application/octet-stream

我甚至试过这样:

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
NSError *error; 

for(NSData *eachImage in self.fetchedAtt) { 

    NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     //NSString *value = @"qux"; 
     //NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding]; 

// [FORMDATA appendPartWithFormData:eachImage名:@“此搜索“]; [formData appendPartWithFileData:eachImage name:@“image1”fileName:@“test.jpg”mimeType:@“image/jpeg”]; }错误:&错误];

NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
     if (error) { 
      NSLog(@"%@", error.localizedDescription); 
      return; 
     } 

     NSLog(@"%@", responseObject); 
    }]; 
    [task resume]; 
} 

但是得到了Request failed: internal server error (500)。如果我取消appendPartWithFormData的注释并注释其他行,则在responseObject中获得相同的字节。

更多更新:
我们在邮递员上进行了测试,图片上传成功。但是,如果我给一些参数,我得到

Request failed: unsupported media type (415)

回答

1

当你上传图片,你会期望从服务器响应的一些(只是承认自己成功接收)。话虽如此,看看你的十六进制数据,这很好奇。是什么样子是:

enter image description here

的 “JFIF” 和 “的Exif” 引用是用JPEG反应是一致的。 image1看起来像是你发送的图像的名称。但这是一个非常奇怪的回应。这绝对不是图片的网址。

您应该联系Web服务作者并获取他们正在发回的内容的详细信息,因为它不符合标准响应(XML,JSON等)。


顺便说一句,您的上传图片的方法看起来不正确。你通常会做一些事情,如:

[formData appendPartWithFileData:eachImage 
          name:@"image1" 
         fileName:@"test.jpg" 
         mimeType:@"image/jpeg"]; 

很明显,你会指定fileNamemimeType匹配什么NSData真的。我会仔细检查Web服务的作者是否真的想使用字段名称image1 ......这有点不典型。

+0

非常感谢罗布:)我试过你的修复,更新了我的问题,并得到'请求失败:内部服务器错误(500)'这似乎是从后端问题。我将在明天后更新它,因为后端人员一天不在。 –

+0

我在想不常见的'image1'字段名称是不正确的(这可能会导致这些问题)。这可能是很多事情。我们不能说没有看到服务器代码或从后端家伙更清晰的定义... – Rob

+0

嘿抢...感谢问题解决。这是后端问题。 –