AFNetworking 不允许上传大文件

Posted

技术标签:

【中文标题】AFNetworking 不允许上传大文件【英文标题】:AFNetworking won't allow large file upload 【发布时间】:2013-10-15 18:22:58 【问题描述】:

使用 AFNetworking,我正在尝试上传尺寸为 33695 的图像 (1280x990)。下面的代码适用于较小的图像(即:390x390),但较大的图像会引发错误:

[client POST:@"/upload_image" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData) 

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

 success:^(NSURLSessionDataTask * task, id responderData) 

 failure:^(NSURLSessionDataTask * task, NSError * error) 

];

抛出错误:

NSDebugDescription = "JSON text did not start with array or object and option to allow fragments not set.";

我搜索了许多其他帖子,似乎没有任何内容涉及较大图像尺寸的问题。有什么建议吗?

【问题讨论】:

该错误是否是由于服务器发回非 JSON 响应而引发的?收到的实际响应是什么。您是否使用 Charles 来查看实际发送/接收的内容? 该错误不是服务器发回非 JSON 响应的结果,我使用了 Charles,甚至没有服务器调用发出。但是,对于较小的图像(即:我将图像大小调整为 320x320),呼叫就会结束,一切都很好。似乎 AFHTTPSessionManager 不喜欢较大的文件。 这是服务器端问题。服务器向您发送错误的 json 请联系服务器人员。 【参考方案1】:

根据 AFNetworking 的作者,请改用 appendPartWithFileURL。因为数据将从磁盘流式传输。

【讨论】:

【参考方案2】:

我在尝试使用 AFNetworking 时遇到了类似的问题。从那以后,我转而使用 RestKit 和 SDWebImage 来处理图像的异步加载和缓存......它就像一个魅力。您可能想看一下 Quora 上的这篇文章,以更好地比较它们之间的差异......主要是 Restkit 的一个缺点是异步和缓存,但 SDWebImage 只需一行代码就可以轻松解决这个问题。

http://www.quora.com/ios-Development/RestKit-vs-AFNetworking-What-are-the-pros-and-cons

【讨论】:

以上是关于AFNetworking 不允许上传大文件的主要内容,如果未能解决你的问题,请参考以下文章

[AFN]AFNetworking错误总结

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

如何在 ios 中处理大文件上传?

2016 - 1 - 25 第三方网络框架 AFN的简单使用

IOS AFN (第三方请求)

AFN3.0封装