Python 替换blobstore文件
我将blobstore中的静态KML作为保存到blobstore的文件提供Python 替换blobstore文件,python,google-app-engine,google-cloud-datastore,kml,python-2.7,Python,Google App Engine,Google Cloud Datastore,Kml,Python 2.7,我将blobstore中的静态KML作为保存到blobstore的文件提供 class KMLHandler2(blobstore_handlers.BlobstoreDownloadHandler): def get(self): resource = 'AMIfv965WtxAc_rWOVjSSx423_oe6f-g5obWYNKX5scg-1gqvISyaZCnv6lRaqro2wOVNOogttyMOylFLsRYZ3Y9UYIe-A69vAt4pdJB2-SH
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,而不是编写新的并刷新密钥。你能帮助我吗?appengine文档说明了如何编写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)
写入blob后,将无法更改它们(仅读取或删除)。您可以使用数据存储实体跟踪与给定KML“文档”关联的当前blob键
您可能还对云存储API()感兴趣,它允许您通过创建具有相同名称的新对象来覆盖“bucket”对象。好的,那么我将创建一个新blob。谢谢你提供的信息。