amazon s3 全称为
亚马逊简易存储服务
(Amazon Simple Storage Service) 简单的说就是个网上存文件的服务器,可以把自己文件放上去,然后通过它开放的api来进行管理。官方网站是
http://aws.amazon.com/cn/s3/
在s3上面有一个
bucket
,我的理解就是模块化,因为那个东西很大,如果我要存在音乐文件和安装包,和在一起放的话会很乱,就用bucket来分一下模块。这样后台也可以更好的管理。对于开发者也可以只开放对于的模块,安全性也得到提高。还有一点就是s3上每个文件都有一个
key
,这个key如果从后台来看的话就是文件的文件名。如果设置了对外开放的话,全球用户都可以根据这个key去访问这个文件
最近学习的就是用python写一个上传文件到s3的功能
上传的话主要包括 (1)检测文件是否存在;(2)上传文件
判断key是否存在的代码 其中BUCKET_NAME 就是上面提到的 bucket的名字。然后还有两个东西是
AWS_ACCESS_KEY_ID
,
AWS_SECRET_ACCESS_KEY
这两个东西是s3的唯一认证,在注册好之后会得到这两个东西,python中直接写到java里面就可以。如果是在java中的话会是一个文件credentials,把这两个东西写进去,然后把这个文件放到windows用户目录下的.aws文件夹下才可以用。我们觉得不方便所以就没有用java来写。
def is_s3_file_exist(key):
weather s3 exists this key
return True exist
bucket_name = BUCKET_NAME
# connect to the bucket
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(bucket_name)
# create a key to keep track of our file in the storage
k = Key(bucket)
k.key = key
if k.exists(None):
logging.info("s3 exists this file")
return True
else:
return False
上传部分的代码,前面和上一个函数都差不多,上传也就只有一行 k.set_contents_from_filename(filepath),然后有一个k.make_public()这个的话就是前面所说的让所有人都可以访问这个文件,但是后台得配置一下权限。
def upload_apk_to_s3(key,filepath):
upload apk to s3
try:
bucket_name = BUCKET_NAME
# connect to the bucket
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(bucket_name)
# create a key to keep track of our file in the storage
k = Key(bucket)
k.key = key
k.set_contents_from_filename(filepath)
# we need to make it public so it can be accessed publicly
# using a URL like http://s3.amazonaws.com/bucket_name/key
k.make_public()
logging.info("upload file to s3 success")
return True
except Exception,e:
logging.info("upload_apk_to_s3 error")
logging.info(e)
return False
在代码中有一个logging.info(""),这个是linux常用的打印日志的方法,因为在
linux
中这些代码都是后台运行的。如果靠print来输出日志的话,我们是看不到的,这个东西非常好用一次配置之后整个工程都可以用
import logging
logging.basicConfig(filename='/var/log/xx/xx.log',
filemode='a',
format='%(asctime)s %(name)s %(levelname)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.DEBUG)
以后只需要调用logging.info("")就可以了,然后利用命令
tail -f /var/log/xx/xx.log
就可以查看最新的log文件了,还有一点值得注意的是,这些目录得先创建好,日志文件它会自己创建,但是目录不会。