Как передать ссылку на аудио в gae blobstore

У меня есть аудиофайл, хранящийся в виде больших двоичных объектов в хранилище BLOB-объектов движка Google. Я не уверен, как получить хороший URL-адрес для перехода на сторону клиента для воспроизведения BLOB-объекта. Я хотел бы сделать что-то вроде библиотеки изображений.

image.get_serving_url()

Но нет аудиомодуля. Итак, есть ли хороший способ получить URL-адрес из BLOB-объекта для воспроизведения аудио или, что еще лучше, любого медиа?


person Justin    schedule 28.02.2012    source источник


Ответы (2)


Рендеринг изображения осуществляется браузером. То же самое и со звуком: браузер решает, что делать с ресурсом, на который вы ему указываете. Для этого вам нужно добавить правильный заголовок mime type[1]. Если для файла уже был установлен правильный тип mime при загрузке, вам не нужно делать это вручную.

Что касается обслуживания большого двоичного объекта, вам необходимо создать обработчик загрузки хранилища больших двоичных объектов: http://code.google.com/appengine/docs/python/tools/webapp/blobstorehandlers.html#BlobstoreDownloadHandler

[1] http://en.wikipedia.org/wiki/Internet_media_type

person schuppe    schedule 28.02.2012
comment
Спасибо за ответ! Файлы имеют правильный тип mime, установленный при загрузке. Я не хочу, чтобы пользователь что-либо скачивал. Я просто хотел бы, чтобы они могли воспроизводить звук. Я надеялся, что смогу предоставить правильный URL-адрес из BLOB-объекта и воспроизвести его через аудиотег html5. - person Justin; 29.02.2012
comment
Вещи, воспроизводимые с тегом аудио, все равно должны откуда-то обслуживаться. Вы бы служили с обработчиком загрузки, но не в смысле загрузки и безопасности на локальном диске. - person schuppe; 29.02.2012

Я думаю, что вы ищете что-то вроде того, как работает S3, где загружаемым вами BLOB-объектам автоматически присваивается URL-адрес, который затем может быть переброшен непосредственно в браузер. Blobstore был разработан, чтобы в первую очередь дать разработчикам контроль над своими URL-адресами и детальный контроль над доступом к большим двоичным объектам. У него нет возможности просто предоставить URL-адрес на основе, скажем, ссылки на большой двоичный объект. Я думаю, что ответ Шуппе правильный в описании того, что вам нужно сделать.

Если вы заинтересованы в том, чтобы просто предоставить пользователю большой двоичный объект без какой-либо проверки подлинности или ограничений, написать обработчик не так сложно. Тот, который находится в документации, на которую ссылается schuppe, будет работать нормально, однако будьте осторожны, потому что он может открыть ваше приложение для определенных типов DOS-атак. Кроме того, если вы делаете это так, как это делается в документации, любой, у кого есть одна из ваших строк ссылки на большой двоичный объект, может получить доступ к любому двоичному объекту во всем вашем приложении, независимо от того, хотите вы этого или нет. Поэтому вы должны создать дополнительный контроль доступа вокруг него.

Конечно, если вы не заинтересованы в контроле доступа к данным, это решение простое и будет работать нормально.

person Rafe Kaplan    schedule 01.03.2012
comment
Это отличная информация. Я только учусь и провожу тестирование в песочнице, поэтому пока не слишком беспокоюсь о безопасности. Но это, безусловно, забота. Спасибо. - person Justin; 02.03.2012