5

Aktualnie przechowuję pliki .docx w GAOB Blobstore. Ostatnio zauważyłem, że te pliki są pobierane bez rozszerzeń plików na niektórych komputerach (IE 9 dla Windows 7), ale działają dobrze dla innych (IE 8, Chrome dla Windows 7).GAE pobrane rozszerzenia plików z blobstore

Oto jak pliki są przechowywane w 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 ## 

oto nagłówki odpowiedzi do pliku z inspektorem 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 

Oto jak Służę blob:

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

Próbowałem nawet twardego kodowania content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document' bez rezultatu.

Wszelkie pomysły na temat tego, co się dzieje i jak to naprawić?


Oto jak uzyskać informacje o pliku podczas początkowego zapisywania obiektu typu blob. Jestem prawie pewien, że błąd nie jest występujących na tym poziomie, ale tutaj jest prekursorem problemu:

# 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

W jaki sposób wysyłasz blob? send_blob? –

+0

Tak, używam 'self.send_blob (blob_info, save_as = blob_info.filename)' – kennysong

+0

Czy możesz opublikować kod, który faktycznie oblicza 'filename', aby upewnić się, że ma rozszerzenie. Ponadto, możesz sprawdzić za pomocą BlobInfo, że nazwa pliku jest przechowywana z odpowiednim rozszerzeniem. –

Odpowiedz

3

Ah, jak na komentarze na początku, rozwiązanie było dodać rozszerzenie pliku na atrybut pliku w BlobInfo. Początkowo nie zdawałem sobie sprawy, że jest to konieczne, ponieważ Chrome automatycznie dodawał rozszerzenie pliku podczas pobierania.

Powiązane problemy