【问题标题】:Uploading files to S3 using Python使用 Python 将文件上传到 S3
【发布时间】:2017-10-18 23:27:10
【问题描述】:

我有一个文件 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)

【问题讨论】:

  • 无法将文件直接发送到 S3。您可能会考虑使用类似 wget 而不是浏览器来检索文件。你可以传入一个文件列表供它下载,所以你甚至不需要循环。
  • @Angrysheep 新手在这里。使用 wget 时文件究竟会下载到哪里?另外,如果每个链接都受密码保护怎么办?
  • stackoverflow.com/questions/23761579/… 有关于密码的建议。至于下载位置,wget 将使用您指定的任何路径。在尝试之前,您需要先查看文档。

标签: python xml file url amazon-s3


【解决方案1】:

使用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

享受

【讨论】:

    【解决方案2】:

    如果您的系统上安装了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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-13
      • 2016-02-06
      • 2016-06-23
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 2011-09-25
      相关资源
      最近更新 更多