2010-11-25 70 views
2

我写的OBJ-C的应用程序,并想上传一个二进制文件的大小数兆到我的AppEngine上的服务器(Python)的二进制数据AppEngine上的斑点。我猜我需要为此使用blob实体,但我不确定如何去做这件事。我一直在使用http请求和响应来发送和接收数据,但他们已经用字符串编码。有人可以建议我如何去做同样的obj-c应用程序的blob吗?我看到一些涉及http请求的例子,但它们似乎适用于网页,我不太熟悉它。也许有任何体面的教程或演练?使用在OBJ-C的应用程序

我基本上不能完全肯定,如果我应该其编码为HTTP请求和发送回通过响应,如何让二进制数据到来自客户端的HTTP字符串,以及如何将其发送在下载我的二进制数据时从服务器正确备份。我想也许这种方法必须完全不同于我用param1 = val & param2 = val2样式格式将值编码到我的请求中,但不确定。

我应该使用blobstore服务吗?一个重要的注意事项是,我听说blob有一个1兆的限制,但我需要存储2-3兆像素的音频文件(至少1.8 meg)。

回答

2

我最近有做类似的事情,但它是通过套接字连接二进制数据。给客户端使用XML,以服务器作为数据流。发送它时,我结束了base64编码二进制数据。这有点罗嗦,但特别是在客户端,它使事情变得更容易处理,在我的XML中不需要担心特殊字符。然后我用NSData将它翻译成真正的二进制格式。我使用this code来进行编码和解码,搜索“cyrus”以查找我使用的片段,这里有几个可以工作。

在你的情况我会改变你的HTTP请求后数据呼叫,而不是把它所有的URL。如果你不确定有什么不同,看看here

我不熟悉Python,但你可以尝试here对这一目标的帮助。

希望有所帮助。

编辑 - 它看起来像斑点是要走的路。有关字符串/ blob类型的this link以及有关使用blob的更多信息,请参阅this link

+0

我假设你有能力使用appengine服务器对此进行编码/解码,但我从未使用过它,所以我猜这可能是窗外的,如果情况并非如此。如果你不能,那么将它存储为blob会比编码它并将其存储为文本更好。 – slycrel 2010-12-03 22:03:25

0

有一个在这里的三个问题:

  1. 您应该使用二进制数据的BLOB?
  2. 你怎么发布二进制数据,并从应用程序引擎使用它
  3. 你如何检索应用程序引擎的二进制数据

我不能回答你“应该”使用斑点,只有你会知道答案,这很大程度上取决于您试图存储的数据类型以及如何使用它。以图像为例(这可能是最流行的用例)。您希望用户使用手机拍照,上传照片,然后与其他用户分享照片。这很好用,但是@slycrel表明你会遇到记录大小的限制。这可以是可行的,例如你可以使用python图像库(pil)缩小图像尺寸。

要发布的二进制数据,请参见this question。最好缓存2个副本,缩略图和全尺寸。这种方式只能在上传时调整大小。如果您想更好地使用它,可以使用应用程序引擎的新后台作业功能将图像处理排队以备后用。无论哪种方式,您都需要返回新创建的blob的ID,以便您可以从设备中引用它,而无需其他http请求。

要检索数据,我认为最好的方法是将BLOB当作自己的资源来对待。调整你的路线,使得任何给定的斑点具有独特的URL:

http://myweb/images/(thumbnail|fullsize)/<blobid>.(jpg|png|gif) 

哪里BLOBID是动态的,JPG,PNG或GIF可用于获取特定类型的图像。缩略图或全尺寸可用于检索您发布时保存的较小或较大的版本。

相关问题