在我的应用中,我正在创建一个在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()
答案 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。