如何操作谷歌应用程序引擎数据存储中的文件



我的问题围绕着一个用户将文本文件上传到我的应用程序。在将该文件保存到数据存储之前,我需要获取该文件并用我的应用程序进行处理。从我所读到的一点内容来看,我了解到用户上传会以Blob的形式直接进入数据存储,如果我可以获取该文件,对其执行操作(意味着更改内部数据),然后将其重新写入数据存储,这是可以的。所有这些操作都需要由应用程序完成。不幸的是,从数据存储文档来看,http://code.google.com/appengine/docs/python/blobstore/overview.html应用程序无法直接在数据存储中创建blob。那是我最头疼的事。我只需要一种方法,在没有任何用户上传交互的情况下,从我的应用程序在数据存储中创建一个新的blob/文件。

blobstore != datastore

只要数据<1MB,在您的实体上使用db.BlobProperty

正如Wooble所评论的,新的File API允许您写入blobstore,但除非您使用任务或类似mapreduce库的东西增量写入blobstore-File,否则您仍然受到1MB API读/写调用限制。

感谢您的帮助。经过许多不眠之夜,3本应用程序引擎书和大量的谷歌搜索,我找到了答案。以下是代码(应该很容易解释):

from __future__ import with_statement
from google.appengine.api import files
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
class MainHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write('Hello WOrld')
        form=''' <form action="/" method="POST" enctype="multipart/form-data">
Upload File:<input type="file" name="file"><br/>
<input type="submit"></form>'''
        self.response.out.write(form)
        blob_key="w0MC_7MnZ6DyZFvGjgdgrg=="
        blob_info=blobstore.BlobInfo.get(blob_key)
        start=0
        end=blobstore.MAX_BLOB_FETCH_SIZE-1
        read_content=blobstore.fetch_data(blob_key, start, end)
        self.response.out.write(read_content)
    def post(self):
        self.response.out.write('Posting...')
        content=self.request.get('file')
        #self.response.out.write(content)
        #print content
        file_name=files.blobstore.create(mime_type='application/octet-stream')
        with files.open(file_name, 'a') as f:
            f.write(content)
        files.finalize(file_name)
        blob_key=files.blobstore.get_blob_key(file_name)
        print "Blob Key="
        print blob_key
def main():
    application=webapp.WSGIApplication([('/', MainHandler)],debug=True)
    util.run_wsgi_app(application)
if __name__=='__main__':
    main()

相关内容

  • 没有找到相关文章

最新更新