簡體   English   中英

如何將base64圖像存儲為GAE數據存儲區中的文件

[英]How to store base64 image as a file in GAE datastore

我有一個用base 64編碼的圖像,我希望將其存儲在我的數據存儲模型中。

class Surveys(db.Model):
    name = db.StringProperty(required = True)
    text = db.TextProperty(required = True)
    image = db.BlobProperty()
    created = db.DateTimeProperty(auto_now_add = True)

如何將base64字符串轉換回我可以放入數據庫的文件? 以下是我如何為普通文件執行此操作。

name = 'test'
text = 'test'
image = self.request.get('img')
s = Surveys(name = name, text = text)
s.image = db.Blob(image)
s.put()

您在尋找解碼base64數據的方法嗎?

您可能希望查看Python提供的各種base64實用程序 例如, base64.b64decode

import base64

binary_data = base64.b64decode(base64_encoded_string)

假設JPEG文件被正確編碼為base64,這將“反轉”操作 - 返回與原始文件內容相同的字節串。 所有文件“元信息”在此過程中都會丟失:您只能獲取文件的內容。 不是其原始名稱,權限等。

您可以將base64字符串直接存儲到數據存儲中,然后在運行時在需要發送JPEG字節時對其進行解碼。

或者反過來做...我更喜歡在存儲到數據存儲區之前首先解碼base64,因為它的字節效率更高,你只需要解碼一次。

並且您在這里不需要“文件”的概念……您只需將圖像存儲為字節,當您需要將其以JPEG格式發送到瀏覽器時,只需創建適當的http標頭即可(例如Content-Type:image / jpeg)並回顯/寫入http體中的字節。

要添加到其他所有內容(這都是很好的建議):考慮使用ndb(新數據庫)而不是db作為模型。 如果對單個圖像檢索執行get_by_id(),則ndb將為您處理memecache。 這將真正加快您經常訪問的圖像的延遲。 另外,如果它是一個經常訪問的圖像,則除了類型之外,還要在響應標頭中添加一個緩存控制語句。 HTH。 -stevep

self.response.headers['Content-Type'] = 'image/jpeg'
self.response.headers['Cache-Control']  = 'public, max-age=315360000'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM