无法通过 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 的流的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat 上的 HTTP/1.1 200 213 使用 RESTKit 上传 jpeg 文件
通过 RestKit 发布 ManagedObject 会导致“无法更新从未插入的对象”