繁体   English   中英

使用 Python 将文件上传到 S3

[英]Uploading files to S3 using Python

我有一个文件 URL 列表,它们是下载链接。 我已经编写了 Python 代码来将文件下载到我的计算机上。 问题来了,列表中有大约 500 个文件,Chrome 在下载了大约 50 个文件后变得没有响应。 我最初的目标是将我下载的所有文件上传到 s3 中的 Bucket。 有没有办法让文件直接转到S3? 这是我到目前为止所写的内容:

import requests
from itertools import chain
import webbrowser

url = "<my_url>"
username = "<my_username>"
password = "<my_password>"
headers = {"Content-Type":"application/xml","Accept":"*/*"}

response = requests.get(url, auth=(username, password), headers = headers)
if response.status_code != 200:
    print('Status:', response.status_code, 'Headers:', response.headers, 'Error Response:', response.json())
    exit()

data = response.json()
values = list(chain.from_iterable(data.values()))
links = [lis['download_link'] for lis in values]
for item in links:
    webbrowser.open(item)

使用python3和boto3(AWS SDK)非常简单,例如:

import boto3

s3 = boto3.client('s3')
with open('filename.txt', 'rb') as data:
    s3.upload_fileobj(data, 'bucketname', 'filenameintos3.txt')

有关更多信息,您可以在此处阅读 boto3 文档: http ://boto3.readthedocs.io/en/latest/guide/s3-example-creating-buckets.html

享受

如果您的系统上安装了aws cli ,则可以使用subprocess库。 例如:

import subprocess
def copy_file_to_s3(source: str, target: str, bucket: str):
   subprocess.run(["aws", "s3" , "cp", source, f"s3://{bucket}/{target}"])

同样,您可以将该逻辑用于各种 AWS 客户端操作,例如下载或列出文件等。这样就无需导入 Boto3。 我想它的用途不是那样的,但在实践中我发现那样很方便。 通过这种方式,您还可以获得控制台中显示的上传状态 - 例如:

Completed 3.5 GiB/3.5 GiB (242.8 MiB/s) with 1 file(s) remaining

要根据您的意愿修改该方法,我建议您查看子流程参考以及AWS Cli 参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM