无法通过 RestKIT 0.22 上传二进制数据 - 服务器接收长度为 0 的流

Posted

技术标签:

【中文标题】无法通过 RestKIT 0.22 上传二进制数据 - 服务器接收长度为 0 的流【英文标题】:Can't upload binary data via RestKIT 0.22 - server receives 0 length stream 【发布时间】:2015-02-03 17:38:02 【问题描述】:

我们的服务器是 WCF,并且有一个接受二进制数据并存储它的方法:

[WebInvoke(Method = "POST", //@WSF-687
     BodyStyle = WebMessageBodyStyle.WrappedRequest,
     ResponseFormat = WebMessageFormat.Json,
     UriTemplate = "File/fileName")]
ContentResponse UploadFile(string fileName, Stream fileStream);

我们的客户端是objective-c,我们正在尝试使用RESTKit 将对象(图像/等...)发布到服务器-但另一端的流始终为0,没有内容...

Restkit 代码:

NSData* rawData //this is the data we want to send
[[RKObjectManager sharedManager] postObject: data path:OUR_SERVER_PATH parameters:nil success:nil failure: nil]

调用成功但服务器接收到空流..

当我们使用另一种创建表单数据的方法时 - 它可以工作,但它会将表单数据附加到有问题的内容(我们需要原始数据)。

我们错过了什么?

谢谢!

【问题讨论】:

【参考方案1】:

对于上传没有其他格式(JSON / XML)数据的原始数据,您不应该使用 RestKit,这不是它的用途。您可以访问 AFNetworking,或者您可以使用 Apple 提供的 API,这些更适合您的要求。

【讨论】:

您好,感谢您的回答。你能提供一个代码sn-p吗?是否可以将请求与他们提供的请求队列集成?此外,当结果不是 JSON 而是二进制数据时,我们设法使用 RestKIT 下载文件。支持下载但不上传怎么可能? 并不是不支持它,它只是不是为它设计的。响应只是二进制数据(没有包装器)吗?您可以使用自定义序列化程序来执行此操作,但这通常是多余的(除非您需要发出 JSON 请求并接收二进制返回)。如果您创建自己的操作,则可以将其添加到对象管理器的operationQueue 没有包装器。我对原始数据使用'getWithAction',在成功处理程序中我只使用'operation.HTTPRequestOperation.responseData',我得到NSData,它是原始数据(没有json等......)(如你所说)如果使用 RESTKit 是不可能的 - 我该如何使用 AFNetworking? 在对象管理器http管理器上使用requestWithMethod:path:parameters:,然后将数据添加到请求中,然后创建AFHTTPRequestOperation,设置完成块并执行。 太棒了 :) 它奏效了!我们现在将扩展 RKObjectManager 以添加对此的支持。非常感谢韦恩!

以上是关于无法通过 RestKIT 0.22 上传二进制数据 - 服务器接收长度为 0 的流的主要内容,如果未能解决你的问题,请参考以下文章

通过 RestKit 或任何 HTTP 请求上传回形针照片

Tomcat 上的 HTTP/1.1 200 213 使用 RESTKit 上传 jpeg 文件

RestKit 是不是支持带宽限制?

通过 RestKit 发布 ManagedObject 会导致“无法更新从未插入的对象”

使用 Restkit 上传图像 - 向 UITableView 添加两行而不是一行

RestKit 0.20 无法从服务器获取数据