将文件从python应用程序上传到appengine

时间:2013-12-05 07:52:47

标签: python google-app-engine

我想将一个文件从我的电脑上运行的python应用程序上传到appengine上托管的appengine应用程序。

假设我有一个文件foo.txt,我想上传到appengine,假设我可以通过我的python脚本在PC上对这个url做出这个完全荒谬的GET请求。

http://appid.appspot.com/?file=foo.txt 

由于url长度限制为大约2000个字符,因此无法将文件作为GET请求传递,因此必须发出POST请求。

如何将POST请求设为appengine app并将文件作为参数发送?

然后按如下方式处理关于appengine的请求,

class MainHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads('file')
        blob_info = upload_files[0]
        self.response.write(blob_info)

我知道这不起作用,这样做的正确方法是什么。 有没有更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

以下代码适用于向用户提供pdf下载。在StringIO对象中读取上载的文件后,可以使用它来提供下载。

outputStream = StringIO.StringIO()
output.write(outputStream) #write merged output to the StringIO object

fname = 'filename'
self.response.headers['Content-Disposition'] = 'attachment; filename=' + fname + '.pdf'
self.response.write(outputStream.getvalue())

然后,从您的appengine应用程序中,您可以阅读此响应,将其存储为StringIO对象并使用Google文件API将其存储为磁盘文件。

请参阅this SO链接,了解如何将上传的文件转换为StringIO对象。

要知道在编写输出之前我是如何生成这个pdf的,请阅读我的entire article

答案 1 :(得分:1)

您似乎意识到了Blobstore ......您提出的问题在文档中有详细说明。

https://developers.google.com/appengine/docs/python/blobstore/#Python_Uploading_a_blob