【问题标题】:AFNetworking 3 AFMultipartFormData getting bytes data in responseAFNetworking 3 AFMultipartFormData 获取字节数据作为响应
【发布时间】:2016-11-07 20:05:05
【问题描述】:

我这样做是为了将数组中的图像发送到服务器:

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,这是字节数据。

根据网络人的响应应该是图像的 URL。 Web 后端位于ASP.NET 我做错了什么?

更新
如果我更改响应序列化程序,我会得到:

请求失败:不可接受的内容类型: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 name:@"image1"]; [formData appendPartWithFileData:eachImage name:@"image1" fileName:@"test.jpg" mimeType:@"image/jpeg"]; } 错误:&error];

    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 中得到相同的字节。

更多更新:
我们在postman上测试了一下,图片上传成功。但是如果我在参数中给出一些东西,我会得到 ​​p>

请求失败:不支持的媒体类型 (415)

【问题讨论】:

    标签: ios asp.net objective-c afnetworking multipartform-data


    【解决方案1】:

    当您上传图片时,您会期望服务器会做出一些响应(只是确认它们已成功接收)。话虽如此,看看你的十六进制数据,很好奇。它的样子是:

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

    您应该联系 Web 服务作者并详细了解他们发回的具体内容,因为它不符合标准响应(XML、JSON 等)。


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

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

    很明显,您可以指定 fileNamemimeType 以匹配 NSData 的实际含义。我会与 Web 服务的作者再次确认他们是否真的想使用 image1 的字段名称......这有点不典型。

    【讨论】:

    • 非常感谢 Rob :) 我已经尝试过您的修复,更新了我的问题并得到了Request failed: internal server error (500),这似乎是后端的问题。明天我会更新它,因为后端的人已经走了一天。
    • 我想知道不寻常的image1 字段名称是否不正确(这可能会导致这类问题)。可能有很多东西。我们不能说没有看到服务器代码或更明确的定义来自后端人员......
    • 嘿 Rob... 谢谢问题已解决。这是一个后端问题。
    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多