从AppEngine中的blob接收静态URL

时间:2012-09-17 17:43:37

标签: python google-app-engine blobstore

在我的应用中,我正在创建一个在App Engine仪表板中正确上传的blob。但是,此创建的文件需要通过电子邮件发送给相应的人。为了做到这一点,我要么将文件本身作为附件,要么是这个人可以下载的静态URL。我无法弄清楚如何从blobkey中获取静态URL。

这是创建文件的代码,但它没什么特别的:

    file_name = files.blobstore.create(mime_type='text/csv')
with files.open(file_name, 'a') as f:
  f.write(dataset)
files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
blob_info = blobstore.BlobInfo.get(blob_key)

new_url = blob_key.urlsafe()

3 个答案:

答案 0 :(得分:5)

如果您要提供该文件,请查看Blobstore Overview - Serving a Blob

如果您想将其作为附件发送,请参阅Attachments Documentation。您需要fetch the contents of the blob然后将其附加到邮件中。

from google.appengine.ext import blobstore

# blob_key = ...

# Instantiate a BlobReader for a given Blobstore value.
blob_reader = blobstore.BlobReader(blob_key)

# Read the entire value into memory. This may take a while depending
# on the size of the value and the size of the read buffer, and is not
# recommended for large values.
blob_contents = blob_reader.read()

答案 1 :(得分:0)

看看AppEngine Blobstore docs,他们很好地解释了如何检索和使用Blobstore条目。以下是文档中的示例。

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    self.send_blob(blob_info)

答案 2 :(得分:0)

我的用例不同,但我通过查找url路径从blobstore提供静态内容。这是模型和获取函数。

class StaticContent(db.Model):
    body = db.BlobProperty()
    content_type = db.StringProperty()
    last_modified = db.DateTimeProperty(required=True, auto_now=True)
    etag = aetycoon.DerivedProperty(lambda x: hashlib.sha1(x.body).hexdigest())

def get(path):  
    return StaticContent.get_by_key_name(path)

您可以在step1 tag of my master branch in my git hub repo

上看到我的wepapp2处理程序

有关详细说明,您还可以查看Nick Johnson's blog post on serving static content via a blogstore