An App Engine application cannot:

write to the filesystem. Applications must use the App Engine

datastore for storing persistent data.

您需要做的是向用户呈现带有文件上载字段的表单.

提交表单后,文件将上载,Blobstore将从文件内容中创建一个blob,并返回一个blob键,可用于稍后检索和提供blob.

允许的最大对象大小为2千兆字节.

这是一个可以尝试的工作代码段:

#!/usr/bin/env python

#

import os

import urllib

from google.appengine.ext import blobstore

from google.appengine.ext import webapp

from google.appengine.ext.webapp import blobstore_handlers

from google.appengine.ext.webapp import template

from google.appengine.ext.webapp.util import run_wsgi_app

class MainHandler(webapp.RequestHandler):

def get(self):

upload_url = blobstore.create_upload_url('/upload')

self.response.out.write('

')

self.response.out.write('

' % upload_url)

self.response.out.write("""Upload File:

name="submit" value="Submit">

""")

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):

def post(self):

upload_files = self.get_uploads('file')

blob_info = upload_files[0]

self.redirect('/serve/%s' % blob_info.key())

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):

def get(self, resource):

resource = str(urllib.unquote(resource))

blob_info = blobstore.BlobInfo.get(resource)

self.send_blob(blob_info)

def main():

application = webapp.WSGIApplication(

[('/', MainHandler),

('/upload', UploadHandler),

('/serve/([^/]+)?', ServeHandler),

], debug=True)

run_wsgi_app(application)

if __name__ == '__main__':

main()

EDIT1:

在您的特定情况下,您可以使用BlobProperty(限制为1MB)来存储您的请求:

class Photo(db.Model):

imageblob = db.BlobProperty()

然后调整你的webapp.RequestHandler来保存你的请求:

class Upload(webapp.RequestHandler):

def post(self):

image = self.request.get("Filedata")

photo = Photo()

photo.imageblob = db.Blob(image)

photo.put()

EDIT2:

您无需更改app.yaml,只需添加新的处理程序并将其映射到WSGI中即可.

要检索存储的照片,您应该添加另一个处理程序来为照片提供服务:

class DownloadImage(webapp.RequestHandler):

def get(self):

photo= db.get(self.request.get("photo_id"))

if photo:

self.response.headers['Content-Type'] = "image/jpeg"

self.response.out.write(photo.imageblob)

else:

self.response.out.write("Image not available")

然后映射你的新DownloadImage类:

application = webapp.WSGIApplication([

...

('/i', DownloadImage),

...

], debug=True)

您可以使用以下网址获取图片:

yourapp/i?photo_id = photo_key

根据要求,如果出于任何奇怪的原因,您真的想使用这种网址www.mysite.com/i/photo_key.jpg来提供图像,您可能想尝试这样做:

class Download(webapp.RequestHandler):

def get(self, photo_id):

photo= db.get(db.Key(photo_id))

if photo:

self.response.headers['Content-Type'] = "image/jpeg"

self.response.out.write(photo.imageblob)

else:

self.response.out.write("Image not available")

略有不同的映射:

application = webapp.WSGIApplication([

...

('/i/(\d+)\.jpg', DownloadImage),

...

], debug=True)

python如何保存图像_Python应用引擎:如何保存图像?相关推荐

  1. python怎么保存源代码_python程序如何进行保存

    保存Python程序,可以使用以下方法:使用编辑器编写代码并保存 1.打开Notepad++ 2.需要新建文本时,点击左上角"文本",在弹出的菜单栏点击"新建" ...

  2. python image库保存图片_python PIL 打开\显示\保存图像

    使用python进行数字图片处理,还得安装Pillow包.虽然python里面自带一个PIL(python images library), 但这个库现在已经停止更新了,所以使用Pillow, 它是由 ...

  3. python归档excel数据_python怎么把数据保存为excel

    在python中把数据保存为excel的方法:首先下载xlwt:然后使用[win R]快捷键打开cmd,切换目录到下载的文件地址并输入[python setup.py install]:再调用xlwt ...

  4. python保存表格_python怎么把数据保存为excel

    在python中把数据保存为excel的方法:首先下载xlwt:然后使用[win+R]快捷键打开cmd,切换目录到下载的文件地址并输入[python setup.py install]:再调用xlwt ...

  5. python如何保存列表_python中数据的保存

    1.将list中的数据写入到excel文件中 利用python包numpy(实现方式应该有许多种,这里只是记录成功实现的一种)中的savetxt 局限性:要保存的list可以为[1,2,3,4,5]这 ...

  6. python画xy轴_python画双y轴图像的示例代码

    很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴. matplotlib和seaborn都可以画双y轴图像. 一个例子: import ...

  7. python 下载视频文件_python 实现视频流下载保存MP4的方法

    如下所示: # -*- coding:utf-8 -*- import sys import os from glob import glob import requests reload(sys) ...

  8. python获取cookie文件_Python Cookie 读取和保存方法

    如下所示: #保存 cookie 到变量 import urllib.request import http.cookiejar cookie = http.cookiejar.CookieJar() ...

  9. python numpy读取数据_Python numpy数据的保存和读取

    原博文 2019-04-01 16:30 − 在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现 ...

最新文章

  1. 指定服务器无效,安装sqlserver2008r2 服务器配置,服务帐户配置出错,提示Sql server服务指定的凭据无效...
  2. Android状态栏颜色修改
  3. hp服务器维护开关,HP服务器开机无显维修案例
  4. CMake Error: CMake was unable to find a build program corresponding to Ninja.
  5. Spring4 MVC json问题(406 Not Acceptable)
  6. Dubbo源码学习总结系列三 dubbo-cluster集群模块
  7. python filter map区别_python中filter、map、reduce的区别
  8. OSGI和Spring动态模块–简单的Hello World
  9. Eclipse安装VJET报错解决办法
  10. azure云数据库_如何将MySQL表迁移到Microsoft Azure SQL数据库
  11. DE12 Continuation: General Theory for Inhomogeneous ODEs
  12. Python使用APP Inventor网络微数据库TinyWebDB
  13. 如何解决wmv/asf/asx格式转成mp4/avi/3gp/mpg/flv的问题
  14. justinmind夜话:数据母板系列视频教程之原型设计二十一条军规
  15. 射极跟随器负载过重引起的失真问题(摘抄)
  16. 苏宁2021“轻装上阵”,张近东:聚焦零售优势业务,增利减亏
  17. C语言基础知识入门和C语言入门基础知识大全
  18. 魔方(6)三阶空心魔方、二阶空心魔方
  19. Unity实时运动残影特效
  20. Python 教你哄女票开心

热门文章

  1. jquery的ajax用法
  2. 用线性代数理解 Normal Equation
  3. cocos2d(背景图片循环滚动)
  4. 使用游标逐行更新数据
  5. 数据库-使用Command对象进行数据库查询
  6. 将unsigned char字符串以16进制的字符串显示
  7. CStringArray 字符串数组的使用 以及调试时怎么Dump出其中的内容
  8. 大数据之-Hadoop3.x_MapReduce_数据压缩---大数据之hadoop3.x工作笔记0138
  9. 软考信息系统项目管理师_考试题型介绍_选择题75分_45分过_案例分析题_75分_45分过_计算题_论文题的架构和写法---软考高级之信息系统项目管理师002
  10. AndroidStudio_android多线程和异步任务_要学内容介绍_相关知识点---Android原生开发工作笔记241