我正在使用 AFNetworking 向 Django 服务器发送 HTTP 请求以将文件下载到 iPhone。但是,控制台也不会打印出“成功”或“错误”。我也无法在特定目录“.../database”中找到该文件。对于服务器端,日志文件是正确的 ([22/Jan/2015 16:45:49] "GET/main/receivefile/HTTP/1.1"200 16811),我可以看到请求并且没有错误。这是我的客户端代码:
var parameters = ["username":"u987103"];
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let outPath = String(format: "%@/database/tmp.txt", documentsPath)
self.man = AFHTTPRequestOperationManager()
self.op = self.man.GET(url, parameters: parameters,
success: {(operation:AFHTTPRequestOperation!,responseObject:AnyObject!) in
println("Success")
}
, failure:{(operation:AFHTTPRequestOperation!,error:NSError!) in
println("Error: %@",error);
})
op.outputStream = NSOutputStream(toFileAtPath: outPath, append: false)
Django服务器中请求URL对应的代码为:
def retrieve_file(request):
filename = os.path.basename(m_path)
path = os.path.join(settings.MEDIA_ROOT,m_path)
wrapper = FileWrapper(file(path))
response = HttpResponse(wrapper,content_type="text/plain")
response['Content-Disposition'] = 'attachment; filename="'+filename+'"'
return response
我已经测试过使用 Chrome 下载文件,只要我输入 URL 并点击“输入”,文件就会下载到我的下载文件夹中。那么谁能告诉我为什么它对 AFNetwokring 不起作用?
最佳答案
是的,没错。
在这里查看文档 - http://cocoadocs.org/docsets/AFNetworking/2.0.0/Classes/AFHTTPRequestOperationManager.html#//api/name/responseSerializer .您需要为 AFHttpRequestOperationManager
指定响应序列化程序。
您似乎正在下载一个纯文本文件,因此您可以使用默认的序列化程序。添加此调用:
self.man.responseSerializer = AFHttpResponseSerializer()
在调用 self.man.GET
之前。
https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide有一些关于响应和请求序列化器如何工作的细节。
关于ios - 使用 AFNetworking 从 Django 服务器下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28100766/