博客实现相册功能,SAE storage记录

花了一下午,总得写点什么吧~

这是在博客历程里的话:

2014-03-31
1.昨天学习wtforms和flask-wtf。有点绕,花了大量时间,但是没怎么实战。算了,总比没看好,就当锻炼自己的毅力了。
2.根据澳洲一刻的源码以及FMN的博文中提到的SAE python图床网站,最终为博客添加了“相册”功能。目前可以上传图片,可以显示所有图片。
待解决:
1.上传图片,自动创建缩略图,不用每次都载入所有图片。
2.以后图片多了,要创建相册。目前不需要,且没思路。
3.美化“相册”页面,太丑了。
4.CSS已经荒废了.....    


总结:

1.storage的文档在这:http://sae.sina.com.cn/doc/python/storage.html#id1

storage用来存放用户的持久化存储的文件。可以用API读取写入获取操作,也可以用客户端 ,不过我没用过客户端,原因是....丫的下载不了

2.API使用手册

class  sae.storage. Error

Storage异常类。

class  sae.storage. Connection ( accesskey=ACCESS_KEYsecretkey=SECRET_KEY, account=APP_NAMEretries=3 )

Connection类

参数:
  • accesskey – 可选。storage归属的应用的accesskey,默认为当前应用。
  • secretkey – 可选。storage归属的应用的secretkey,默认为当前应用。
  • account – 可选。storage归属的应用的应用名,默认为当前应用。
  • retries – 请求失败时重试的次数。
get_bucket ( bucket )

获取一个bucket类的instance。

参数:bucket – bucket的名称。
class  sae.storage. Bucket ( bucketconn=None )

Bucket类,封装了大部分的storage操作。

参数:
  • bucket – bucket的名称。
  • conn – 可选。一个sae.storage.Connection的实例。
put ( acl=Nonemetadata=None )

创建一个bucket。

参数:
  • acl – bucket的 ACL (Access Control List)。
  • metadata – 需要保存的元数据,metadata应该是一个dict,例如 {‘color’: ‘blue’} 。
post ( acl=Nonemetadata=None )

修改bucket的acl和metadata。其中metadata的修改为增量修改。

list ( prefix=Nonedelimiter=Nonepath=Nonelimit=10000marker=None )

列出bucket中的object。

参数:
  • prefix – object名称的前缀。
  • delimiter – 分割字符。折叠包含该分割字符的条目。
  • path – 返回路径path下的全部objects。等价于prefix为path,delimiter为/。
  • limit – 最大返回的objects条数。
  • marker – 返回object名为marker后面的结果(不包含marker)。
返回:

符合条件的objects的属性的一个generator。

stat ( )
返回:当前bucket的属性信息。
delete ( )

删除bucket。被删除的bucket必须已经清空(没有任何object)。

put_object ( objcontentscontent_type=Nonecontent_encoding=Nonemetadata=None )

创建或更新一个object。

参数:
  • obj – object的名称。
  • contents – object的内容,可以是字符串或file-like object。
  • content_type – object的mime类型。
  • content_encoding – object的encoding。
  • metadata – object的元数据。
post_object ( objcontent_type=Nonecontent_encoding=Nonemetadata=None )

更新object的一些属性。

注意:object的metadata的更新是全量的,和container的增量修改不一样。

get_object ( objchunk_size=None )

获取object的内容和属性信息。

参数:
  • obj – object的名称。
  • chunk_size – 不返回object的全部内容,而是返回一个文件内容的generator,每次iterate返回chunk_size大小的数据。
返回:

一个tuple (obj的属性信息, object的内容)。

get_object_contents ( objchunk_size=None )

获取object的内容。

参数同get_object,只返回object的内容。

stat_object ( obj )

获取object的属性信息。

delete_object ( obj )

删除object。

generate_url ( obj )

返回object的public url。


3.模拟storage为文件系统

from sae.ext.storage import monkey

monkey.patch_all()

以上代码会将storage挂载到/s/目录下,每个bucket为这个目录下的一个子目录。用户可以使用/s/<bucket-name>/<object-name>这样的形式的路径通过文件系统接口来访问storage中的object。

目前支持(patch)的文件系统接口函数为: open, os.listdir, os.mkdir, os.path.exists, os.path.isdir, os.open, os.fdopen, os.close, os.chmod, os.stat, os.unlink, os.rmdir。


4.在SAE线上运行环境中操作storage

#创建一个bucket的instance

from sae.storage import Bucket

bucket = Bucket('t')

# 创建该bucket

bucket.put()

#修改该bucket的acl和缓存过期时间。

#获取该bucket的属性信息

attrs = bucket.stat()

返回值:

{'acl': '.r:.sinaapp.com,.r:sae.sina.com.cn',
 'bytes': '0',
 'metadata': {'expires': '1d'},
 'objects': '0'}
好吧,是字典,好操作。

#存储一个字符串到bucket中

bucket.put_object('1.txt','hello,world')

#获取object的public url

bucket.generate_url('1.txt')

返回值:

'http://pylabs-t.stor.sinaapp.com/1.txt'
#列出该bucket中的所有obcjets
[i for i in bucket.list()]
返回列表,因为bucket.list()返回的是迭代器。好吧,确实要看《Learning Python》
#获取object的所有属性
bucket.stat_object('1.txt')
bucket.stat_object('1.txt')
{'bytes': '12',
 'content_type': 'text/plain',
 'hash': 'e4d7f1b4ed2e42d15898f4b27b019da4',
 'last_modified': '2013-05-22T05:09:32.259140',
 'metadata': {},
 'timestamp': '1369199372.25914'}
#取object的内容
bucket.get_object_contents('1.txt')
'hello, world'
#删除objects
buket.delete_object('1.txt')
#删除bucket
bucket.delete()
5.模拟目录结构
storage中不支持创建实际的目录,但是用户可以通过object name中加入/来模拟目录结构。
bucket.put_object('a/1.txt','')
bucket.put_object('a/2')
略,暂时

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值