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)
Come si invia indietro il blob? send_blob? –
Sì, sto usando 'self.send_blob (blob_info, save_as = blob_info.filename)' – kennysong
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. –