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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值