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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。