Amazon S3

简介: Amazon S3

image.png

Amazon Simple Storage Service (Amazon S3) 是一种面向 Internet 的存储服务。您可以通过 Amazon S3 随时在 Web 上的任何位置存储和检索的任意大小的数据

官方文档

www.amazonaws.cn/documentati…

运维把服务配好以后,给了一个账号,可以登录查看S3的存储效果

作为一个职业前端选手,看到官方提供了Node的开发文档,果断使用Node进行效果测试

在配置文件配置 aws_key 和 aws_secret 以及 region_name (注意:国内北京区域是 cn-north-1)

配置好以后发现通过官方提供的 Demo 连接不上,总是提示 Key 错误,找了好多方案都没解决,当时就无语了,后来继续看官方文档,后来想到 python 也有实现,要不换 python 试试?配置之类的都没变,python 代码拿来就能跑,既然这么顺,那就用 python 做开发测试吧

获取存储桶名称
import boto3
s3 = boto3.resource('s3')
# 获取存储桶名称
for bucket in s3.buckets.all():
    print(bucket.name)

上传

import boto3
s3 = boto3.client('s3')
# 上传本地图片
data = open('test.jpg', 'rb')
s3.Bucket('skin-test').put_object(Key='test.jpg', Body=data)
# 通过名称上传文件
s3.upload_file('test.jpg', 'skin-test', 'test-file2.jpg')
# 上传时 ExtraArgs 用于指定附加参数,例如用户提供元数据
s3.upload_file(
    "test.jpg", "skin-test", "test-file3.jpg",
    ExtraArgs={"Metadata": {"mykey": "myvalue"}}
)
# 上传一个可读的类文件对象
with open('package-lock.json', 'rb') as f:
    s3.upload_fileobj(f, 'skin-test', 'package-lock.json')

获取上传进度

# 为了跟踪传输的进度,可以提供进度回调,以便每次在传输进度时调用回调
import os 
import sys
import threading
import boto3
class ProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = float(os.path.getsize(filename))
        self._seen_so_far = 0 
        self._lock = threading.Lock()
    def __call__(self, bytes_amount):
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = (self._seen_so_far / self._size) * 100
            sys.stdout.write(
                "\r%s %s / %s (%.2f%%)" % (
                    self._filename, self._seen_so_far, self._size, percentage))
            sys.stdout.flush()
s3 = boto3.client('s3')
s3.upload_file(
    "001.tif", "skin-test", "001.tif",
    Callback=ProgressPercentage("001.tif"))

下载

# 根据名称下载文件
import boto3
s3 = boto3.client('s3')
s3.download_file("skin-test", "001.tif", "001.tif")

显示下载进度

import sys
import threading
import boto3
class ProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._seen_so_far = 0
        self._lock = threading.Lock()
    def __call__(self, bytes_amount):
        with self._lock:
            self._seen_so_far += bytes_amount
            sys.stdout.write(
                "\r%s --> %s bytes transferred" % (
                    slf._filename, self._seen_so_far))
            sys.stdout.flush()
s3 = boto3.client('s3')
s3.download_file(
    "skin-test", "001.tif", "download_001.tif",
    Callback=ProgressPercentage("download_001.tif"))

生成预签名url链接

import boto3
import requests
s3 = boto3.client('s3')
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'skin',
        'Key': 'server2.js'
    }
)
print(url)

注意:这里需要进行ICP备案以后url才能正常运行,否则会提示无权操作

You are not authorized to perform this operation


目录
相关文章
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
1672 0
|
Android开发
Android 状态栏WiFi图标的显示逻辑
Android 状态栏WiFi图标的显示逻辑
646 0
|
10月前
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
1619 20
|
SQL 关系型数据库 MySQL
如何创建SQL数据库——初学者指南
在现代信息技术的浪潮中,数据库管理系统(DBMS)已经成为数据处理的核心工具之一。结构化查询语言(SQL)作为数据库管理系统的核心语言,在数据库创建、管理以及优化方面扮演着关键角色。本文将详细指导初学者如何使用SQL创建数据库,涉及的内容包括但不限于安装数据库系统、使用SQL命令创建数据库、设置用户
635 5
|
缓存 NoSQL Java
【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection los
【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection los
734 0
|
Oracle Java 关系型数据库
Java SpringBoot集成Activiti7工作流
Java SpringBoot集成Activiti7工作流
|
存储 人工智能 自然语言处理
无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
【8月更文挑战第8天】无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案
|
存储 缓存 负载均衡
什么是CDN(内容分发网络)?
什么是CDN(内容分发网络)?
8383 7
|
Web App开发 测试技术
使用selenium轻松实现元素拖拽
本文介绍了如何使用Selenium进行Web自动化测试中的元素拖拽操作。通过`ActionChains`类,我们可以模拟用户拖拽行为,确保测试覆盖到页面布局调整等交互功能。示例代码展示了如何定位元素并执行拖拽,以及在实际场景中改变页面布局的应用。利用Selenium的拖拽功能,可提升自动化测试的真实性和效率。
|
机器学习/深度学习 虚拟化 异构计算
浅析GPU通信技术(上)-GPUDirect P2P
1. 背景 GPU在高性能计算和深度学习加速中扮演着非常重要的角色, GPU的强大的并行计算能力,大大提升了运算性能。随着运算数据量的不断攀升,GPU间需要大量的交换数据,GPU通信性能成为了非常重要的指标。
29817 1