использование appengine больших двоичных объектов для двоичных данных в приложении obj-c - PullRequest
2 голосов
/ 25 ноября 2010

Я пишу приложение obj-c и хочу загрузить двоичный файл размером несколько мегабайт на мой сервер appengine (python).Я предполагаю, что мне нужно использовать объект BLOB-объектов для этого, но я не уверен, как это сделать.До сих пор я использовал http запросы и ответы для отправки и получения данных, но они были закодированы в виде строк.Может кто-нибудь посоветовать, как мне поступить так же с BLOB-объектами из приложения obj-c?Я вижу некоторые примеры, связанные с http-запросами, но, кажется, они ориентированы на веб-страницу, и я не очень знаком с этим.Есть ли какие-нибудь приличные учебники или пошаговые руководства, возможно?

Я в принципе не совсем уверен, если я должен закодировать его в запрос http и отправить обратно через ответ, как получить двоичные данные вHTTP-строка от клиента и как правильно отправить ее обратно с сервера при загрузке моих двоичных данных.Я думаю, что, возможно, подход должен полностью отличаться от того, к которому я привык при кодировании значений в моем запросе в формате стиля param1 = val¶m2 = val2, но неуверенно.

Должен ли я использоватьСервис Blobstore для этого?Одно важное замечание: я слышал, что для блобов существует ограничение в 1 мегабайт, но у меня есть аудиофайлы размером 2-3 мегабайта, которые мне нужно хранить (как минимум 1,8 мегабайта).

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Мне недавно пришлось сделать что-то подобное, хотя это были двоичные данные через сокетное соединение. Клиенту, использующему XML, серверу как поток данных. Я закончил base64 кодированием двоичных данных при отправке туда и обратно. Это немного многословно, но особенно на стороне клиента, это облегчает работу, никаких особых символов в моем XML не о чем беспокоиться. Затем я перевел его с NSData в настоящий двоичный формат. Я использовал этот код для кодирования и декодирования, поиска "cyrus", чтобы найти фрагмент, который я использовал, есть несколько, которые будут работать здесь.

В вашем случае я бы изменил ваш http-запрос на вызов данных поста, а не помещал бы все это в URL. Если вы не уверены, в чем разница, посмотрите здесь .

Я не так хорошо знаком с Python, но вы можете попробовать здесь для помощи по этому вопросу.

Надеюсь, это поможет.

Редактировать - похоже, капли - это путь. Посмотрите эту ссылку для типа string / blob, а также эту ссылку для получения дополнительной информации о работе с BLOB-объектом.

0 голосов
/ 09 декабря 2010

Здесь три вопроса в одном:

  1. Стоит ли использовать BLOB для двоичных данных?
  2. Как вы публикуете двоичные данные и используете их из движка приложения
  3. Как вы получаете двоичные данные из движка приложения

Я не могу ответить, если вы «должны» использовать большие двоичные объекты, только вы будете знать ответ на этот вопрос, и это сильно зависит от типа данных, которые вы пытаетесь сохранить, и от того, как они будут использоваться. Давайте возьмем изображение для примера (который, вероятно, самый популярный вариант использования для этого). Вы хотите, чтобы пользователи сделали фотографию с помощью телефона, загрузили ее, а затем поделились ею с другими пользователями. Это хорошее использование больших двоичных объектов, но, как подсказывает @slycrel, вы столкнетесь с ограничениями размера записи. Это может быть осуществимо, например, вы можете использовать библиотеку изображений Python (pil), чтобы уменьшить изображение.

Чтобы опубликовать двоичные данные, см. этот вопрос . Лучше всего кешировать 2 копии, миниатюру и полный размер. Таким образом, изменение размера происходит только один раз при загрузке. Если вы хотите сделать что-то лучше, вы можете использовать новую функцию фоновых заданий в движке приложения, чтобы поставить в очередь обработку изображений на потом. В любом случае вам нужно будет вернуть идентификатор только что созданного большого двоичного объекта, чтобы можно было ссылаться на него с устройства без дополнительного http-запроса.

Я думаю, что для извлечения данных лучшим подходом было бы рассматривать BLOB как собственный ресурс. Настройте маршруты так, чтобы у каждого данного блоба был уникальный URL:

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

Где BLOBID является динамическим, и JPG, PNG или GIF могут использоваться для получения определенного типа изображения. Миниатюру или полноразмерную версию можно использовать для получения уменьшенной или увеличенной версии, которую вы сохранили, когда они ее опубликовали.

...