Python 替换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

我将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,而不是编写新的并刷新密钥。你能帮助我吗?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。谢谢你提供的信息。