5

現在、GAE Blobstore に多数の .docx ファイルを保存しています。最近、一部のコンピューター (Windows 7 の場合は IE 9) ではこれらのファイルがファイル拡張子なしでダウンロードされていることに気付きましたが、他のコンピューター (IE 8、Windows 7 の場合は Chrome) では問題なく動作します。

ファイルがブロブストアに保存される方法は次のとおりです。

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

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

ブロブを提供する方法は次のとおりです。

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

ハードコーディングを試みcontent_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'ても無駄でした。

何が起こっているのか、それを修正する方法についてのアイデアはありますか?


リクエストに応じて、ブロブを最初に保存するときにファイル情報を取得する方法を次に示します。このレベルでエラーが発生していないことは確かですが、問題の前兆は次のとおりです。

# 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)
4

1 に答える 1

3

ああ、上部のコメントによると、解決策はファイル拡張子を BlobInfo のファイル名属性に追加することでした。ダウンロード時にChromeがファイル拡張子を自動的に追加したため、最初はこれが必要であることに気づきませんでした。

于 2012-10-30T19:42:11.247 に答える