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文件了,还有一点值得注意的是,这些目录得先创建好,日志文件它会自己创建,但是目录不会。