將文件上傳到blobstore後,會將其重命名爲「s9QmBqJPuiVzWbySYvHVRg ==」。如果您導航到其「/ serve」URL來下載文件,則下載的文件被命名爲亂七八糟的字母。如何從GAE的blobstore下載具有原始文件名的文件?
有沒有辦法讓下載的文件在上傳時保留其原始文件名?
將文件上傳到blobstore後,會將其重命名爲「s9QmBqJPuiVzWbySYvHVRg ==」。如果您導航到其「/ serve」URL來下載文件,則下載的文件被命名爲亂七八糟的字母。如何從GAE的blobstore下載具有原始文件名的文件?
有沒有辦法讓下載的文件在上傳時保留其原始文件名?
當文件被使用BlobUploadHandler
原來的文件名上傳存儲爲新創建的BlobInfo
實體名稱屬性。
在團塊服務處理器,你可以指定BLOB應下載附件退還,並且你可以指定什麼名字應該把它與
from google.appengine.ext import webapp
import urllib
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, blob_info_key=None):
blob_info_key = str(urllib.unquote(blob_info_key))
blob_info = retrieve_blob_info(blob_info_key)
self.send_blob(blob_info, save_as=blob_info.filename)
blob_app = webapp.WSGIApplication([
('/_s/blob/([^/]+)', blob.ServeHandler),
], debug=config.DEBUG)
的代碼被保存在您指的是BlobInfo實體的鍵,但原始文件名存儲爲屬性。
如果你想有一個簡單的方法,通過它的文件名,下載一個文件,你可以使用此代碼,我用我的ServeHandler,它適合我的需要,它的文件名下載文件,而不是Blobstore鍵的:
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, resource):
blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(urllib.unquote(resource)))
if blobs.count(1) > 0:
blob_info = blobstore.BlobInfo.get(blobs[0].key())
self.send_blob(blob_info,save_as=True)
當使用實驗性API將文件直接寫入Blobstore時,是否有指定blob_info.filename的方法? – kennysong
有一個相關的問題http://stackoverflow.com/questions/5697844/how-to-set-filename-property-in-blobstore – topless
@ Chris-Top這太棒了!謝謝:) – kennysong