对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
参考文档
👉产品概述
API-Explorer
👉在线调用示例
创建手册
👉快速入门
文件写入COS
解析arXiv论文链接为PDF文件存入COS
import requests
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import os
这里qcloud_cos
的安装,我是安装了cos-python-sdk-v5
可以正常执行,应该是一个比较旧的版本。pip install cos-python-sdk-v5
# COS配置信息
secret_id = 'XXXX' # SecretId
secret_key = 'XXX' # SecretKey
region = 'ap-beijing' # COS区域
bucket = 'XXXXX' # 存储桶名称
# 初始化COS客户端
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
# arXiv PDF链接
pdf_urls = [
"https://arxiv.org/pdf/2403.01147",
"https://arxiv.org/pdf/2402.19387"
]
# 下载PDF并上传到COS
for pdf_url in pdf_urls:
# 生成PDF文件名,这里假设使用URL中的ID部分作为文件名
pdf_name = pdf_url.split('/')[-1] + ".pdf"
# 下载PDF
response = requests.get(pdf_url + ".pdf", stream=True)
if response.status_code == 200:
# 指定COS中的存储路径,这里将文件保存到PDF文件夹中
cos_path = 'PDF/' + pdf_name
# 上传PDF到COS
try:
client.put_object(
Bucket=bucket,
Body=response.raw.read(), # 文件内容
Key=cos_path, # COS中的文件路径
StorageClass='STANDARD', # 存储类型
ContentType='application/pdf' # 文件类型
)
print(f"上传成功: {cos_path}")
except Exception as e:
print(f"上传失败: {e}")
else:
print(f"下载失败: {pdf_url}")
输出:
上传成功: PDF/2403.01147.pdf
上传成功: PDF/2402.19387.pdf
从COS读取数据
读取COS中创建的PDF
文件夹下的文件名称
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
# COS配置信息
secret_id = 'xxxx' # SecretId
secret_key = 'xxx' #SecretKey
region = 'ap-beijing' # COS区域
bucket = 'xxx' # 存储桶名称
# 初始化COS客户端
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
# 指定要列出文件的文件夹前缀
prefix = 'PDF/'
# 调用list_objects方法获取文件夹内的文件列表
response = client.list_objects(
Bucket=bucket,
Prefix=prefix, # 使用前缀来限制响应中的对象
Delimiter='/' # 指定一个分隔符,用于对对象名进行分组
)
# 初始化一个空列表用于存储文件名
file_names = []
# 遍历响应中的Contents字段获取文件名
if 'Contents' in response:
for content in response['Contents']:
file_names.append(content['Key'])
# 输出文件名列表到控制台
print(file_names)
输出:
['PDF/', 'PDF/2402.19387.pdf', 'PDF/2403.01147.pdf', 'PDF/2403.01758.pdf', 'PDF/2403.02171.pdf']
本文仅实现最基础的简单交互,后续深入使用之后会继续更新~