GAE的数据库是支持向里面保存文件的(说老实话,就算不支持,通过对二进制转化为文本肯定也是可以保存的),这个功能我知道,不过我的用不着,因为我的网站文件并不多,数据库却大的不行,我一直在苦恼如何去节省数据库空间,而从来不去想如何节省文件空间,可是有一个网友一定要我研究一下(主要是有些人比较懒,不想研究,唉!),我只好简单的进行了一下研究,还好,还是比较容易的,现在将主要的流程讲一下。
首先当然是怎么向数据库之中存文件,我仅仅研究了通过本地向远程数据库上传静态文件的模式,想来,通过服务器创建二进制文件并保存也没有什么不同。我使用python脚本实现了一个方便的工具,一旦运行这个脚本,就会将该脚本所在位置uploadFiles文件夹下面的内容上传到GAE的数据库之中,下面是该脚本的源码,那是相当的简单啊:
# -*- coding: utf-8 -*- #
import code
import getpass
import sys
import os
sys.path.append("D:\Program Files\Google\google_appengine\lib\yaml\lib")
sys.path.append("D:\Program Files\Google\google_appengine")
from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.ext import db
#数据格式定义
class FileData(db.Model):
category = db.CategoryProperty(required=True)
uploadTime = db.DateTimeProperty(auto_now= True )
path = db.StringProperty(required=True)
content = db.BlobProperty(required=True)
#如果你将你的用户名和密码写在这个函数里面,就不用每次输入用户名和密码了
def auth_func():
return raw_input('Username:'), getpass.getpass('Password:')
def walkdir(dirname):
ls=os.listdir(dirname)
for l in ls:
path=os.path.join(dirname,l)
if(os.path.isdir(path)):
walkdir(path)
else:
f=open(path,"rb")
content=f.read()
f.close()
item=FileData(category='Test',path=path.replace("\\","/").replace(rootPath,""),content=content)
db.put(item)
#配置要上传的文件夹路径
rootPath="./uploadFiles"
#下面一句配置连接remote_api的路径,至于怎么部署remote_api,看GAE文档和我以前的文章
remote_api_stub.ConfigureRemoteDatastore("yourappid", '/remote_api',auth_func)
#遍历文件夹
walkdir(rootPath)
print "OK"
因为我无意于使用该功能,所以上面的脚本做的很简单,具体的使用可以自己扩充更改,脚本只需要配置上传文件夹路径、appid、remote_api路径三项就应该可以运行了。
上传成功之后,可以在GAE后台看到数据,对于content字段,在GAE后台显示为类似"156240 bytes, SHA-1 = 1d616cd4cd0de8e26f350143e29b3cc63e156825"的描述文本。
下面的问题是如何调用和返回这个内容,这更加容易了,我是采用以下方式来返回此文件的:
result=FileData.all().filter("path = ",path).fetch(1)
if len(result)>0:
self.response.out.write(result[0].content)
else:
self.response.set_status(404)
if len(result)>0:
self.response.out.write(result[0].content)
else:
self.response.set_status(404)
很轻松容易吧,事实上就是这么简单的,有些网友不怎么喜欢研究,这一点要好好批评一下!
相关推荐
GAE平台开发应用时,简单的webapp框架的使用
GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则
pass之GAE入门教程, 学习GAE
Eclipse开发 Gae,Struts2,Spring,云计算,学习gae云计算的好例子
GAE Google App Engine 数据库部分
图自编码器GAE的pytorch实现,参考论文vgae
这是一个在gae(google app engine)上使用Blobstore上传文件的demo
云计算下的PaaS中的GAE和SAE平台
图形自动编码器GAE的pytorch实现,可参考论文VGAE
实现了gae与spring3之间的集成
可以在GAE上直接使用,支持图片上传等。 源代码是修改其他网友的普通blog程序而来,只做了必要的修改,原结构保留 最新版本请去主页下载 http://redpower1998.appspot.com 主页包括原始的普通版本
GAE 集成程序,共有三个软件包,解压后安装包里的python然后运行SDU里的exe文件,最后运行客户端加服务端中localproxy中的proxy.py就可以了
《GAE编程指南》是一种云计算服务,跟其他的同类产品不同,它提供了一种简单的应用程序构建模型,通过这种模型,你可以轻松地构建出能够容纳数百万用户的应用程序。《GAE编程指南》是介绍使用这个强大平台的专家级...
关于GAE的教程、工具与文档(建站) 全
架设在GAE上的GTalk翻译机器人 **目前已经存在的功能: 1. (0.1版开始支持) 可以直接识别中文和英文,并自动进行互译 1. (0.1版开始支持) 可以翻译一段文章,而不单单只是一个单词** **以后可能会有的功能: 1. (0.2...
gae strus2 spring + 文件上传返回文件 google app engine 使用的jar 有图示
《GAE编程指南》是一种云计算服务,跟其他的同类产品不同,它提供了一种简单的应用程序构建模型,通过这种模型,你可以轻松地构建出能够容纳数百万用户的应用程序。《GAE编程指南》是介绍使用这个强大平台的专家级...
百度的bae跟谷歌的gae对比,百度的资源限制很少,但是资源很少,教程很少。。
jiql - (允许你的应用在GAE上使用SQL语句) jiql是在JAVA GAE上访问Google Datastore的JDBC wrapper jiql支持标准的sql语言进行访问原版的官方主页 www.jiql.org 由于原版源代码存在一些问题,所以对改版本做了...
博文链接:https://pickerel.iteye.com/blog/181969