AFNetworking 3 AFMultipartFormData 获取字节数据作为响应
AFNetworking 3 AFMultipartFormData getting bytes data in response
我这样做是为了将数组中的图像发送到服务器:
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...
根据网络人的反应,应该是图像的 URL。 Web 后端在 ASP.NET
我做错了什么?
更新
如果我更改响应序列化器,我会得到:
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];
//[表单数据appendPartWithFormData:eachImage 名称:@"image1"];
[formData appendPartWithFileData:eachImage 名称:@"image1" 文件名:@"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上测试了一下,图片上传成功。但是如果我在参数中给出一些东西,我会得到
Request failed: unsupported media type (415)
当您上传图片时,您会期望从服务器得到一些响应(只是为了确认它们已成功接收)。话虽如此,看看你的十六进制数据,这很好奇。它的样子是:
"JFIF" 和 "Exif" 引用与 JPEG 响应一致。 image1
看起来像是您发送的图像的名称。但这是一个非常奇怪的反应。绝对不是图片的URL
您应该联系 Web 服务作者并了解他们返回的确切内容的详细信息,因为它不符合标准响应(XML、JSON 等)。
顺便说一句,您上传图片的方法看起来不正确。你通常会这样做:
[formData appendPartWithFileData:eachImage
name:@"image1"
fileName:@"test.jpg"
mimeType:@"image/jpeg"];
显然,您需要指定 fileName
和 mimeType
来匹配 NSData
的实际情况。我会与网络服务的作者仔细核实他们是否真的想使用 image1
的字段名称......这有点不典型。
我这样做是为了将数组中的图像发送到服务器:
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...
根据网络人的反应,应该是图像的 URL。 Web 后端在 ASP.NET
我做错了什么?
更新
如果我更改响应序列化器,我会得到:
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];
//[表单数据appendPartWithFormData:eachImage 名称:@"image1"]; [formData appendPartWithFileData:eachImage 名称:@"image1" 文件名:@"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上测试了一下,图片上传成功。但是如果我在参数中给出一些东西,我会得到
Request failed: unsupported media type (415)
当您上传图片时,您会期望从服务器得到一些响应(只是为了确认它们已成功接收)。话虽如此,看看你的十六进制数据,这很好奇。它的样子是:
"JFIF" 和 "Exif" 引用与 JPEG 响应一致。 image1
看起来像是您发送的图像的名称。但这是一个非常奇怪的反应。绝对不是图片的URL
您应该联系 Web 服务作者并了解他们返回的确切内容的详细信息,因为它不符合标准响应(XML、JSON 等)。
顺便说一句,您上传图片的方法看起来不正确。你通常会这样做:
[formData appendPartWithFileData:eachImage
name:@"image1"
fileName:@"test.jpg"
mimeType:@"image/jpeg"];
显然,您需要指定 fileName
和 mimeType
来匹配 NSData
的实际情况。我会与网络服务的作者仔细核实他们是否真的想使用 image1
的字段名称......这有点不典型。