`
hereson
  • 浏览: 1453728 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

在GAE数据库之中保存文件

 
阅读更多

       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)

 

        很轻松容易吧,事实上就是这么简单的,有些网友不怎么喜欢研究,这一点要好好批评一下!

分享到:
评论

相关推荐

    如何在GAE中轻松使用Django框架

    标题中的“如何在GAE中轻松使用Django框架”表明我们即将探讨的是如何在Google App Engine (GAE) 平台上有效地部署和运行Django Web应用程序。Django是一个流行的Python Web框架,它提供了诸如数据库管理、用户认证...

    基于GAE的Demo

    GAE是Google提供的一个云计算平台,允许开发者在Google的基础设施上部署和运行Web应用,提供了包括计算、存储、数据库等在内的多种服务。 首先,Google App Engine(GAE)是Google推出的一个PaaS(Platform as a ...

    GAE之webapp框架

    `webapp`框架内置在GAE的开发环境中,无需额外安装即可直接使用。 **特点:** - **简洁性**:`webapp` 提供了一种简洁的方式来处理HTTP请求。 - **集成性**:与GAE环境高度集成,易于使用GAE提供的各种服务。 - **...

    在GAE中使用django模板

    标题 "在GAE中使用django模板" 涉及到的知识点主要是在Google App Engine (GAE)上部署和使用Django模板系统。GAE是一个由Google提供的平台,允许开发者构建和运行web应用,而Django则是一个流行的Python web框架,它...

    在GAE中读取yaml的例子

    这篇博文“在GAE中读取yaml的例子”探讨了如何在GAE环境中解析和使用YAML配置文件。GAE是一个基于云计算的平台,允许开发者构建和托管Web应用,而YAML文件则可以用来定义应用程序的设置,如服务、库依赖和环境变量。...

    使用Blobstore上传文件到gae的Demo

    在GAE中,Blobstore提供了一组Python API,让开发者可以轻松集成文件上传功能。首先,需要导入`google.appengine.ext.blobstore`模块,然后使用`create_upload_url()`函数生成一个特殊的URL,这个URL可以用于文件...

    GAE blog安装

    在这个场景中,我们讨论的是如何在GAE上安装并配置一个博客系统。 描述中提到的“NULL”没有提供具体信息,但我们可以从一般GAE博客部署的流程中推断出一些关键知识点: 1. **Google App Engine环境设置**:首先,...

    关于GAE的教程、工具与文档(建站)

    **谷歌应用引擎(Google App Engine, GAE)**是谷歌提供的一种云计算平台,允许...在压缩包文件中,可能包含的资源有GAE的官方文档、教程、示例代码以及可能的第三方库和工具,这些都是进一步学习和开发的重要资料。

    gae-pytorch-master_pytorch_pytorchgae_GAE_自编码器_gaepytorchmaster_

    在【标签】中,"pytorch"、"pytorchgae"、"GAE"、"自编码器" 和 "gaepytorchmaster" 是关键点。"pytorch" 是一个广泛使用的深度学习框架,提供了灵活的计算图机制,适合构建复杂的神经网络模型,如自编码器。...

    GAE解决中文乱码问题

    乱码通常与字符编码有关,Java应用默认使用UTF-8编码,但有时服务器或客户端的配置不一致,或者在读写文件或网络传输过程中没有正确指定编码,就可能导致乱码。 在GAE环境下,中文乱码可能出现在以下几个环节: 1....

    spring+gae

    1. **依赖注入**:Spring的DI(依赖注入)使得在GAE环境中管理对象及其依赖关系变得简单,无需使用GAE特有的服务定位器模式。 2. **数据存储**:Spring与GAE的数据存储API(如JDO或JPA)结合,可以提供一个统一的...

    GAE使用规则

    GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则

    GAE入门教程

    pass之GAE入门教程, 学习GAE

    GAE包(以配置好,解压可用)

    而“客户端加服务端中localproxy中的proxy.py”可能是一个本地代理脚本,用于在本地开发环境和服务端之间建立通信,这对于调试和测试GAE应用非常有用。 标签 "GAE 免配置" 强调了该压缩包的便捷性。对于初学者或者...

    gae_in_pytorch-master_GAE_

    在`gae_in_pytorch-master`项目中,可能包含以下关键文件: 1. `model.py`: 包含GAE和VGAE的定义。 2. `dataset.py`: 数据集的加载和预处理,如图的构建、特征提取等。 3. `train.py`: 训练脚本,包括模型实例化、...

    利用DJANGO在GAE上实现小型网络爬虫

    接下来,要解决GAE的限制,因为GAE对文件系统操作有限制,所以不能直接在本地文件系统上保存大量数据。可以使用Google Cloud Storage来存储爬取的数据,或者将数据发送到Google BigQuery进行分析。同时,考虑到GAE的...

Global site tag (gtag.js) - Google Analytics