首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换blobstore文件

替换blobstore文件
EN

Stack Overflow用户
提问于 2012-01-22 09:17:06
回答 1查看 716关注 0票数 2

我将来自blobstore的静态KML作为我保存到blobstore的文件提供

代码语言:javascript
复制
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工作,所以我请求你的帮助。

我可以像文档中那样创建一个处理程序,但这是为了创建一个文件,而不是修改/替换一个文件:

代码语言:javascript
复制
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,我认为这是一个超时问题。我怎样才能把它变成一项任务呢?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-23 11:59:37

一旦写入blob,就不能更改它们(只能读取或删除)。您可以使用数据存储实体来跟踪与给定KML‘文档’相关联的当前blob键。

您可能还会对云存储API ( http://code.google.com/appengine/docs/python/googlestorage/overview.html )感兴趣,它允许您通过创建具有相同名称的新对象来覆盖“存储桶”对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8958187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档