即使“Content-Length”标头的值为

时间:2016-01-22 14:18:56

标签: file-upload multipartform-data nsurlsession nsurlrequest

我正在尝试使用基于NSURLSession和NSURLSessionDataTask基于块的api的this示例,使用多部分表单将多个图像上传到服务器。

此外,对于向服务器发出的所有呼叫,我发送的身份验证令牌验证我是否有权进行上传。

除了我上传和我的身份验证令牌已过期的情况外,一切运行良好。当令牌过期时,我应该收到一个HTTP 400响应,其中一个正文表示过期的令牌是失败的原因(这适用于对服务器的所有其他调用)。

然而,对于我的令牌过期时的多部分表单上传,我得到了400响应,但是在

的完成块中返回了NSData对象
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
                        completionHandler:(void (^)(NSData *data,
                                                    NSURLResponse *response,
                                                    NSError *error))completionHandler

是空的。有趣的是NSData对象不是nil,它只是一个空的NSData对象。

有趣的是,在响应对象中,我看到一个“Content-Length”标题,它是I EXPECT要查看的响应的长度,即“Content-Length”标题大于0,但是长度为NSData对象IS 0。

所以我的问题归结为,NSURLSession不会暴露从服务器返回的数据有什么理由吗?有没有关于在请求中设置“multipart-form”标题,使得响应有一个空主体?

1 个答案:

答案 0 :(得分:0)

我假设当你说'#34;从完成块"返回时,你真的是指"从完成块中检查"。

如果设置了错误,那么空对象可能表示在等待服务器实际发送数据时连接超时。

否则,我有这种模糊的回忆,如果服务器返回某些结果代码,NSURLSession任务不会检索错误页面的主体,并且你必须做一些事情来改变这种行为,比如实现自定义身份验证无论如何,委托告诉它加载。但这是一个模糊的,遥远的记忆,我无法在网上找到任何关于这一点的细节,所以我可能记得错了。