5

Attualmente sto memorizzando un mucchio di file .docx in GAE Blobstore. Di recente ho notato che questi file vengono scaricati senza estensioni di file su alcuni computer (IE 9 per Windows 7), ma funziona bene per gli altri (IE 8, Chrome per Windows 7).GAE ha scaricato estensioni di file dal blobstore

Ecco come i file sono memorizzati nella blobstore:

f = files.blobstore.create(mime_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document', 
          _blobinfo_uploaded_filename=filename) 
## then some code to write data and save ## 

Ecco le intestazioni di risposta per il file dalla finestra di ispezione Chrome:

Cache-Control:no-cache 
Content-Disposition:attachment; filename="causes_of_ww1_emanresu" 
Content-Length:12120 
Content-Type:application/vnd.openxmlformats-officedocument.wordprocessingml.document 
Date:Fri, 26 Oct 2012 23:54:09 GMT 
Server:Google Frontend 
X-AppEngine-Estimated-CPM-US-Dollars:$0.000033 
X-AppEngine-Resource-Usage:ms=15 cpu_ms=0 

ecco come servo il blob:

self.send_blob(blob_info, save_as=blob_info.filename, content_type=blob_info.content_type) 

Ho persino provato hardcoding content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document' inutilmente.

Qualche idea su cosa sta succedendo e come risolverlo?


Come richiesto, ecco come ottengo le informazioni sul file quando si salva inizialmente il blob. Sono abbastanza certo che l'errore non è in corso a questo livello, ma qui è il precursore del problema:

# get the file from a file_url with urlfetch 
result = urlfetch.fetch(file_url) 
headers = result.headers 

# some custom functions to return a filename 
username = self.get_username() 
filename = get_filename(title, username) 

# write the file to blobstore 
f = files.blobstore.create(mime_type=headers['content-type'], 
          _blobinfo_uploaded_filename=filename) 
with files.open(f, 'a') as data: 
    data.write(result.content) 
files.finalize(f) 
blob_key = files.blobstore.get_blob_key(f) 
+0

Come si invia indietro il blob? send_blob? –

+0

Sì, sto usando 'self.send_blob (blob_info, save_as = blob_info.filename)' – kennysong

+0

Puoi pubblicare il codice che calcola effettivamente il 'nomefile', per assicurarti che abbia l'estensione. Inoltre, puoi verificare usando BlobInfo che il nome del file sia memorizzato con l'estensione giusta. –

risposta

3

Ah, come per i commenti in alto, la soluzione era quella di aggiungere l'estensione del file sul attributo nomefile in BlobInfo. Inizialmente, non mi ero reso conto che era necessario poiché Chrome ha aggiunto automaticamente l'estensione del file durante il download.

Problemi correlati