使用 AFNetworking、ios 上传图片
Posted
技术标签:
【中文标题】使用 AFNetworking、ios 上传图片【英文标题】:image upload using AFNetworking, ios 【发布时间】:2013-11-14 00:00:20 【问题描述】:我必须通过发送照片字节将图像上传到服务器,并且我正在使用 AFNetworking, 但我不断收到此错误-
错误:错误域 = NSCocoaErrorDomain 代码 = 3840“操作无法完成。(可可错误 3840。)”(JSON 文本未以数组或对象开头,并且未设置允许片段的选项。) UserInfo=0x10abb7350 NSDebugDescription=JSON 文本不以数组或对象开头,并允许未设置片段的选项。
【问题讨论】:
这个问题中接受的答案应该会有所帮助:***.com/questions/16476428/… 简而言之,错误是您的服务器的响应未格式化为 JSON。通过 NSLog 检查 operation.responseString。 @GutoAraujo 这是我在 responseString 中得到的 - 请求没有足够的数据 @user2916676 你确定你的 php 代码期待一个application/x-www-form-urlencoded
请求(这是你的代码正在创建的)吗?您确定字段名称正确吗?你能和我们分享一下PHP代码吗?另外,关注一下客户端,你确认imageData
里面有合适的图片数据了吗?
@user2916676 PHP 接受文件上传有不同的技术(例如,POST
是标准的application/x-www-form-urlencoded
格式,自定义 Web 服务需要 JSON 或 XML 请求,带有 base 64 编码字符串, ETC。)。我们可能需要有关您的 PHP 期望的更多详细信息(当然,假设您已确认您的 imageData
是有效的(即非nil
)。
让我感到震惊的是,您需要获取有关您提交图像的服务的更多信息。我不知道如何在不了解 API 细节的情况下上传图片。格式良好的请求示例、API 文档或可以为您提供 PHP 源代码副本的人。
【参考方案1】:
如果 PHP 服务器没有以 application/json
响应,那么您必须告诉您的 manager
接受一般的 HTTP 响应:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:path parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
[formData appendPartWithFileData:imageData name:@"image" fileName:imageFilename mimeType:@"image/png"];
success:^(AFHTTPRequestOperation *operation, id responseObject)
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Success: %@", string);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
如果您的服务器使用 JSON 响应进行响应,那么可能是它没有正确设置 Content-Type
标头,例如 header("Content-type: application/json");
。
【讨论】:
使用这个错误已经消失,但现在我得到 Error: Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: not found (404) @user2916676 404 表示 URL 错误或找不到。【参考方案2】:请查看点击链接以获得最简单的图片上传方式。
https://***.com/a/49231873/5247430
【讨论】:
以上是关于使用 AFNetworking、ios 上传图片的主要内容,如果未能解决你的问题,请参考以下文章
ios 上传多张图片总结——IOS网络访问之使用AFNetworking
ios 上传多张图片总结——IOS网络访问之使用AFNetworking