我从blobstore提供静态KML作为我保存到blobstore的文件
class KMLHandler2(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):
resource = 'AMIfv965WtxAc_rWOVjSSx423_oe6f-g5obWYNKX5scg-1gqvISyaZCnv6lRaqro2wOVNOogttyMOylFLsRYZ3Y9UYIe-A69vAt4pdJB2-SHUcdVEM2v0XVLxzT3fTlxwXQVhzmsHPwALH_rCSFIvmYcuV37asVD0Q'
resource = str(urllib.unquote(resource))
blob_info = blobstore.BlobInfo.get(resource)
self.send_blob(blob_info)
这有效,但我想定期更新文件。该文件是从/list.kml
生成的,所以我可以直接从那里读取它,但是它超时了所以我的计划是制作我的第一个appenine任务,从list.kml
读取文件并将其写入blobstore相同的密钥,但如果只有例子是如何创建一个新文件,我该怎么做?我在代码中有更新数据层的地方,它是'不经常。你可以建议我在更新文件时该怎么办?我想我希望密钥和id是相同的,并替换旧的blob而不是写一个新的刷新密钥。你能帮助我吗?应用引擎文档说如何编写一个blobstore文件,但只是一个新文件,我不知道如何编辑或替换文件给定它的关键,我认为这是我需要做的一个任务或cron工作,所以我请求你的帮助。
我可以在文档中创建一个处理程序但是用于创建文件,而不是修改/替换文件:
class CreateKMLHandler(webapp2.RequestHandler):
def get(self):
# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write('data')
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
由于
我尝试使用此代码创建一个新文件但它得到了截止日期错误applicationerror 5,我认为这是一个超时问题。我怎样才能把它变成一项任务呢?
class CreateKMLHandler(webapp2.RequestHandler):
def get(self):
# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')
url = 'http://montaoproject.appspot.com/list.kml'
result = urlfetch.fetch(url)
if not result.content:
return
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(result.content)
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
self.out.write(blob_key)
答案 0 :(得分:2)
一旦写入blob,就无法更改(仅读取或删除)。您可以使用数据存储区实体来跟踪与给定KML“文档”关联的当前blob键。
您可能也对Cloud Storage API(http://code.google.com/appengine/docs/python/googlestorage/overview.html)感兴趣,它允许您通过创建具有相同名称的新对象来覆盖“bucket”对象。