Objective c 在obj-c应用程序中对二进制数据使用appengine Blob

Objective c 在obj-c应用程序中对二进制数据使用appengine Blob,objective-c,http,binary,blob,Objective C,Http,Binary,Blob,我正在编写一个obj-c应用程序,希望将一个大小为几兆的二进制文件上传到我的appengine服务器(python)。我猜我需要使用blob实体来实现这一点,但我不确定如何进行。到目前为止,我一直在使用http请求和响应来发送和接收数据,但它们是用字符串编码的。有人能告诉我,我该如何处理obj-c应用程序中的水滴?我看到了一些涉及http请求的示例,但它们似乎面向web页面,我对它不是很熟悉。有没有像样的教程或演练 我基本上不完全确定,如果我要将其编码到http请求中并通过响应将其发送回,那么如

我正在编写一个obj-c应用程序,希望将一个大小为几兆的二进制文件上传到我的appengine服务器(python)。我猜我需要使用blob实体来实现这一点,但我不确定如何进行。到目前为止,我一直在使用http请求和响应来发送和接收数据,但它们是用字符串编码的。有人能告诉我,我该如何处理obj-c应用程序中的水滴?我看到了一些涉及http请求的示例,但它们似乎面向web页面,我对它不是很熟悉。有没有像样的教程或演练

我基本上不完全确定,如果我要将其编码到http请求中并通过响应将其发送回,那么如何从客户端将二进制数据转换成http字符串,以及如何在下载二进制数据时从服务器正确地发送回。我在想,也许这种方法必须与我习惯的方法完全不同,将值以param1=val¶m2=val2样式的格式编码到我的请求中,但不确定


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

我最近不得不做类似的事情,尽管它是通过套接字连接的二进制数据。使用XML发送到客户端,作为数据流发送到服务器。在来回发送二进制数据时,我最终对其进行了base64编码。这有点冗长,但特别是在客户端,它使事情更容易处理,在我的XML中没有需要担心的特殊字符。然后我用NSData将其转换成真正的二进制格式。我曾经做过编码和解码,搜索“cyrus”来找到我使用的代码片段,这里有一些可以用

在您的情况下,我会将您的http请求更改为post数据调用,而不是将其全部放在URL中。如果你不确定区别是什么,看看

我对python不太熟悉,但您可以在这方面寻求帮助

希望有帮助


编辑-看起来BLOB是一个不错的选择。查看字符串/blob类型以及有关使用blob的更多信息。

这里有三个问题:

  • 您应该为二进制数据使用BLOB吗
  • 如何发布二进制数据,并从应用程序引擎使用它
  • 如何从应用程序引擎检索二进制数据
  • 如果您“应该”使用blob,我无法回答,只有您知道答案,这在很大程度上取决于您试图存储的数据类型以及如何使用它。让我们以图像为例(这可能是最流行的使用案例)。您希望用户使用手机拍照、上传照片,然后与其他用户共享。这是blob的一个很好的用法,但正如@slycrel所建议的,您将在记录大小上遇到限制。这是可行的,例如,您可以使用python映像库(pil)缩小映像的大小

    要发布二进制数据,请参阅。最好缓存2个副本,一个缩略图和一个完整大小的副本。这样,在上传时,调整大小只需发生一次。如果您想做得更好,可以使用app engine的新后台作业功能将图像处理排队等待以后处理。无论哪种方式,您都希望返回新创建的blob的ID,以便无需额外的http请求即可从设备引用它

    要检索数据,我认为最好的方法是将BLOB视为自己的资源。调整路由,使任何给定blob都具有唯一的URL:

    http://myweb/images/(thumbnail|fullsize)/<blobid>.(jpg|png|gif)
    
    http://myweb/images/(缩略图|全尺寸)/(jpg | png | gif)
    

    其中BLOBID是动态的,JPG、PNG或GIF可用于获取特定类型的图像。缩略图或fullsize可用于检索您在发布时保存的较小或较大版本。

    我还假设您有能力使用appengine服务器对其进行编码/解码,但我从未使用过它,因此我猜如果不是这样的话,这可能是不可能的。如果你做不到,那么将其存储为blob将比编码并存储为文本要好。谢谢你的介绍。我去看看。由于其他对象类型的大小限制,我非常确定我必须使用BLOB(尚未确认)。我会更新我原来的帖子来提到这一点。只花了几分钟的时间看看appengine API。我会用一些链接更新我的答案,但听起来你应该已经有了谷歌提供的工具,并且应该使用blob。此外,blob上的大小限制似乎是1MB。我注意到blobstore文档中说“允许应用程序提供大小可达2GB的数据对象”,这让我很困惑这与blob上的1MG限制有什么关系。我有更大的音频文件,我想存储的大小达到几兆,至少不到2兆。这是否意味着我必须打破他们或使用不同的方法?(将更新主要问题)如果你的blob大于限制(如果是1或2MB,不知道在那里),那么你需要将它们分成不同的部分。使用NSData应该不难做到这一点。希望你能解决这个问题。