2011-04-18 18 views
9

Estoy cargando programáticamente archivos de imagen y quiero establecer el nombre del archivo. Cuando cargo un archivo a través de POST, la propiedad del nombre del archivo se establece automáticamente. Sin embargo, al usar el siguiente método, el nombre del archivo no se establece.¿Cómo establecer la propiedad del nombre de archivo en BlobStore?

 image = urllib2.urlopen(url) 
     file_name = files.blobstore.create(mime_type='image/png') 
     with files.open(file_name, 'a') as f: 
      f.write(image.read()) 
     files.finalize(file_name) 
     image_blob_key = files.blobstore.get_blob_key(file_name) 

Respuesta

8

analizar el nombre de archivo en la URL (véase la pregunta relacionada here). Entonces se puede establecer mediante la adición de un parámetro adicional a su llamada files.blobstore.create:

file_name = files.blobstore.create(mime_type='image/png',_blobinfo_uploaded_filename=file_name_from_url) 
+0

Gracias. ¿Te importaría enlazar a donde obtuviste la firma completa para crear la llamada? No pude encontrar ningún documento. –

+0

Me enfrenté a este problema no hace mucho tiempo y, sinceramente, creo que tuve que rastrearlo en el código fuente. ... \ appengine \ api \ files \ blobstore.py –

+0

No debe confiar en los parámetros con guiones bajos a las funciones de la API; pueden cambiar en el futuro. La solución portátil sería almacenar el nombre de archivo en una entidad que haga referencia al BlobStore blob. –

4

Sé que esto es una vieja pregunta, pero ...

self.send_blob (blob_info, salvar_como = True) le permite en lugar de Verdadero, especificar una cadena. Lo que eso significa es que el archivo se servirá con la cadena proporcionada como el nombre del archivo. Entonces, una solución es que guardes el nombre del archivo junto con la blobkey, y luego al servirlos usando send_blob, proporcionas el nombre del archivo como argumento. No le importa cómo se almacenará el archivo, solo le importa cómo se servirá.

Cuestiones relacionadas