在Windows环境下使用Google Storage Python Library
2010 7 30 12:25 PM 3042次查看
分类:Google Storage 标签:Google, Google Storage, Python
而根据Python Library文档,这玩意也需要GSUtil Tool,这让人情何以堪…
好在我翻了下源码,发现gsutil里面有个cloudreader文件夹,这是一个Google App Engine项目。
于是读了下说明文件,配置了boto.cfg,接着本地运行了一下,发现居然成功了。
接着读了下代码,便知道原因了:
import os
# Point to our boto.cfg before importing boto, because boto statically
# initializes credentials when its loaded.
os.environ['BOTO_CONFIG'] = 'boto.cfg'
其实boto这个玩意会读取配置文件,文档里写的是.boto,但是这个文件的绝对路径Python打不开。不过boto还会将os.environ['BOTO_CONFIG']作为配置文件,而这个路径是可以打开的。此外还有篇《Google Storage for Developers on App Engine Python》也提到了这个问题,他的解决办法是在程序里手动配置:
config = boto.config
config.add_section('Credentials')
config.set('Credentials', 'gs_access_key_id', 'YOURACCESSKEY')
config.set('Credentials', 'gs_secret_access_key', 'YOURSECRETKEY')
接着我又脱离了Google App Engine,直接运行了一下,发现也是可以的。
不过文档里的有些例子需要注意,例如Get object and bucket metadata用的是s3的接口,gs并没有bucket.get_acl().acl.grants。
最后分享一个函数,这个被Google改造过的boto没有文档,用起来还得读源码…
import os
os.environ['BOTO_CONFIG'] = 'boto.cfg'
import boto
def upload(bucket, filename, content, mime_type=None, is_public=True):
bucket_uri = boto.storage_uri(bucket, 'gs')
object_uri = bucket_uri.clone_replace_name(filename)
object_key = object_uri.new_key()
headers = {}
if mime_type:
headers['Content-Type'] = mime_type
if is_public:
headers['x-goog-acl'] = 'public-read'
object_key.set_contents_from_string(content, headers)
if is_public:
if '.' in bucket:
template = 'http://%s/%s'
else:
template = 'https://%s.commondatastorage.googleapis.com/%s'
else:
template = 'https://sandbox.google.com/storage/%s/%s'
return template % (bucket, filename)
print upload('keakon', 'test.txt', 'ooxx', 'text/plain')
顺便写了个上传文件的页面。
向下滚动可载入更多评论,或者点这里禁止自动加载。