La API de Blobstore permite que tu aplicación entregue objetos de datos, llamados blobs, que son mucho más grandes que el tamaño permitido para los objetos en el servicio de Datastore. Los BLOB son útiles en la entrega de archivos grandes, como archivos de video o de imagen, y para permitir que los usuarios suban archivos de datos grandes. Los BLOB se crean cuando subes un archivo a través de una solicitud HTTP. Por lo general, las aplicaciones realizarán esta acción con un formulario para el usuario con un campo de carga de archivos. Cuando se envía el formulario, Blobstore crea un BLOB a partir del contenido del archivo y muestra una referencia opaca al BLOB, llamada clave de BLOB, que luego puedes usar para entregar el BLOB. La aplicación puede entregar el valor completo del blob en respuesta a una solicitud del usuario, o puede leer el valor de forma directa a través de una interfaz similar a un archivo de transmisión.
Presentación de Blobstore
App Engine incluye el servicio Blobstore, que permite a las aplicaciones entregar objetos de datos limitados solo por la cantidad de datos que se pueden subir o descargar a través de una única conexión HTTP. Estos objetos se denominan valores de Blobstore, o blobs.
Los valores de Blobstore se entregan como respuestas a la solicitud de los controladores y se crean como cargas a través de formularios web. Las aplicaciones no crean datos BLOB de forma directa. En cambio, los BLOB se crean de forma indirecta con un formulario web enviado o una solicitud HTTP POST
.
Los valores de Blobstore se pueden entregar al usuario, o la aplicación puede acceder a ellos en una transmisión similar a archivos, con la API de Blobstore.
Para solicitar a un usuario que suba un valor de Blobstore, tu aplicación presenta un formulario web con un campo de carga de archivos. La aplicación genera la URL de acción del formulario con una llamada a la API de Blobstore. El navegador del usuario sube el archivo de forma directa a Blobstore a través de la URL generada. Luego, Blobstore almacena el BLOB, reescribe la solicitud para que contenga la clave de BLOB y la pasa a una ruta de acceso en la aplicación. Un controlador de solicitudes en esa ruta de tu aplicación puede realizar un procesamiento de formulario adicional.
Para entregar un blob, tu aplicación establece un encabezado en la respuesta saliente y App Engine reemplaza la respuesta con el valor de blob.
Los blobs no se pueden modificar después de que se crean, pero sí borrar. Cada blob tiene un registro de información de blob correspondiente, guardado en el almacén de datos, que proporciona detalles sobre el blob, como su hora de creación y tipo de contenido. Puedes usar la clave del BLOB para obtener registros de información de BLOB y consultar sus propiedades.
Usa Blobstore
Las aplicaciones pueden usar el Blobstore para aceptar archivos grandes como cargas de los usuarios y entregarlos. Una vez que se suben, los archivos se llaman BLOB. Las aplicaciones no acceden a los BLOB de forma directa, de modo que funcionan con BLOB a través de entidades de información de BLOB (representadas por la clase ) en Datastore.
El usuario crea un BLOB cuando envía un formulario HTML que incluye uno o más campos de entrada de archivos. Tu aplicación conjuntos como el destino (acción) de este formulario, pasando a la función una ruta de URL de un controlador en la aplicación. Cuando el usuario envía el formulario, el navegador del usuario sube a Blobstore los archivos especificados. Blobstore reescribe la solicitud del usuario, almacena los datos del archivo subido y los reemplaza por una o más claves de BLOB correspondientes. Luego, pasa la solicitud reescrita al controlador en la ruta de URL que proporcionaste a .
Este controlador puede realizar procesamientos adicionales según la clave de BLOB.
La aplicación puede leer partes de un valor de Blobstore con una
Sube un BLOB
Para crear y subir un blob, sigue este procedimiento:
1. Crea una URL de carga
Llama a
para crear una URL de carga para el formulario que completará el usuario y pasa la ruta de la aplicación que debe cargarse cuando se complete el POST
del formulario.
Existe una versión asíncrona, create_upload_url_async()
. Permite que tu código de la aplicación se siga ejecutando mientras Blobstore genera la URL de carga.
2. Crea un formulario de carga
El formulario debe incluir un campo de carga de archivos y el enctype
del formulario debe establecerse como multipart/form-data
. Cuando el usuario envía el formulario, se controla el POST
con la API de Blobstore, que crea el BLOB. La API también crea un registro de información para el BLOB, y almacena el registro en el almacén de datos y pasa la solicitud reescrita a tu aplicación en la ruta dada como una clave de BLOB.
No puedes usar un balanceador de cargas de aplicaciones externo global con un NEG sin servidores para controlar las solicitudes de carga enviadas a la URL de /_ah/upload/
que se devuelve desde la llamada a blobstore.create_upload_url
.
En cambio, debes enrutar esas solicitudes de carga directamente al servicio de App Engine. Para ello, puedes usar el dominio appspot.com
o un dominio personalizado que se asigne directamente al servicio de App Engine.
3. Implementa un controlador de carga
En este controlador, puedes almacenar la clave de blob con el resto de tu modelo de datos de la aplicación. La clave de blob en sí permanece accesible desde la entidad de información de blob en el almacén de datos. Ten en cuenta que después de que el usuario envíe el formulario y se llame a tu controlador, el blob ya estará guardado y la información agregada al almacén de datos. Si tu aplicación no quiere mantener el BLOB, debes borrarlo de inmediato para evitar que quede suelto.
Para todas las apps de Flask, todas las llamadas realizadas a los métodos en la claseBlobstoreUploadHandler
requieren el request.environ dictionary
(la solicitud se importa desde el
módulo de Flask). Si tu app es una app WSGI sin un framework web, debes usar el parámetro environ
en el método get_uploads()
.
Cuando reescribe la solicitud del usuario, Blobstore vacía las partes MIME de los
archivos subidos y agrega la clave del blob como encabezado de parte MIME. Blobstore conserva todos los demás campos y partes del formulario, y los pasa al controlador de carga.
Si no especificas un tipo de contenido, Blobstore intentará inferirlo de la extensión del archivo. Si no puede determinar un tipo de contenido, asigna el tipo de contenido application/octet-stream
al blob recién creado.
Entrega un BLOB
Para entregar BLOB, debes incluir un controlador de descarga de BLOB como una ruta en tu aplicación.
Este controlador debe pasar la clave de BLOB del BLOB deseado a blobstore.Send
.