使用 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

iOS开发通过AFNetworking上传图片到服务器

iOS--AFNetWorking 上传图片到服务器

iOS-AFNetworking3.0上传大量(1000张)图片到服务器

[iOS]服务器使用php时多图片上传AFNetworking的设置