2011-04-18 66 views
9

我正在編程上傳圖像文件並且想要設置文件名。當我通過POST上傳文件時,文件名屬性會自動設置。但是,當使用下面的方法時,文件名不會被設置。如何在BlobStore中設置文件名屬性?

 image = urllib2.urlopen(url) 
     file_name = files.blobstore.create(mime_type='image/png') 
     with files.open(file_name, 'a') as f: 
      f.write(image.read()) 
     files.finalize(file_name) 
     image_blob_key = files.blobstore.get_blob_key(file_name) 

回答

8

從url解析文件名(請參閱相關問題here)。然後,你可以通過添加額外的參數,你files.blobstore.create通話設置:

file_name = files.blobstore.create(mime_type='image/png',_blobinfo_uploaded_filename=file_name_from_url) 
+0

謝謝。你介意鏈接到你獲得創建電話的完整簽名的地方嗎?我找不到任何文檔。 – 2011-04-18 02:34:55

+0

我不久前遇到過這個問題,說實話,我認爲我不得不在源代碼中追蹤它。 ... \ appengine \ api \ files \ blobstore.py – 2011-04-18 02:55:15

+0

您不應該將下劃線前綴參數用於API函數 - 它們將來可能會更改。可移植的解決方案是將文件名存儲在引用BlobStore blob的實體中。 – 2011-04-18 05:12:54

4

我知道這是一個老問題,但...

self.send_blob(blob_info,save_as =真)允許你代替True,來指定一個字符串。這意味着文件將與所提供的字符串一起作爲文件名提供。因此,一種解決方案是讓您將文件名與blobkey一起保存,然後當您使用send_blob提供這些文件時,將提供文件名作爲參數。你不在乎文件如何存儲,你只關心它將如何被存儲。

相關問題