首页 > 代码库 > amazon s3 学习 python

amazon s3 学习 python

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

 

amazon s3 学习 python