2012-08-30 56 views

回答

6

當文件被使用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) 
+1

當使用實驗性API將文件直接寫入Blobstore時,是否有指定blob_info.filename的方法? – kennysong

+1

有一個相關的問題http://stackoverflow.com/questions/5697844/how-to-set-filename-property-in-blobstore – topless

+0

@ Chris-Top這太棒了!謝謝:) – kennysong

0

在GAE管理員console,BLOB查看器部分中,當您查看單個BLOB時,查看器右下角有一個下載按鈕,如下面的屏幕截圖所示。

enter image description here

+0

我不知道它是否總是顯示下載按鈕的多米諾骨牌。我有一個文件類型(應用程序/ x-compress),它也表示它的預覽太大 - 沒有下載鏈接。 – nwaltham

0

的代碼被保存在您指的是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) 
相關問題