aws_S3 文件上传下载

# -*- coding:utf-8 -*-
import boto3
from botocore.client import Config
import logging
from botocore.exceptions import ClientError
from info.constants import ACCESS_KEY_ID,ACCESS_KEY_SECRET,BUCKET_NAME,ENDPOINT

# 上传apk文件
class S3Handler(object):

    def __init__(self):

        self.access_key_id = ACCESS_KEY_ID  # id
        self.access_key_secret = ACCESS_KEY_SECRET #秘钥
        self.bucket_name = BUCKET_NAME # 桶名
        self.endpoint = ENDPOINT
        self.s3 = boto3.resource('s3',aws_access_key_id=self.ACCESS_KEY_ID,aws_secret_access_key=self.ACCESS_SECRET_KEY,
                                 config=Config(signature_version='s3v4'))

        self.s3Client = boto3.client('s3',config=boto3.session.Config(signature_version='s3v4',
                                                                      # region_name='eu-central-1',
                                                                      aws_access_key_id=self.ACCESS_KEY_ID,
                                                                      aws_secret_access_key=self.ACCESS_SECRET_KEY,)),




    def save(self, fpath, data):
        # 上传
        # data 二进制数据
        self.s3.Bucket(self.bucket_name).put_object(Key=fpath, Body=data)

    def create_presigned_url(self,bucket_name, object_name, expiration=3600):
        """
        Generate a presigned URL to share an S3 object
        获取文件临时下载url
        :param bucket_name: string
        :param object_name: string
        :param expiration: Time in seconds for the presigned URL to remain valid
        :return: Presigned URL as string. If error, returns None.
        """

        # Generate a presigned URL for the S3 object
        try:
            response = self.s3Client.generate_presigned_url('get_object',
                                                        Params={'Bucket': bucket_name,
                                                                'Key': object_name},
                                                        ExpiresIn=expiration)
        except ClientError as e:
            logging.error(e)
            return None

        # The response contains the presigned URL
        return response

个人总结:
1.signature_version=‘s3v4’ 这个是重点,不然下载url不能打开
2.未实现在不公开桶内下载连接,具体原因尚未清楚
3.重点了解 IAM 相关策略配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python_道无涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值