Скрипт загружает pdf с сайта (анализируя через XML), и я пытаюсь автоматически загрузить их в корзину S3 и определенную папку. Я могу получить файлы по URL-адресу со специально сгенерированным именем файла, но не могу правильно определить формат строки, чтобы загрузить их в корзину S3.

Вот сценарий Python:

import requests
import xml.etree.ElementTree as ET
import boto3
from botocore.exceptions import NoCredentialsError

url = "https://mylink.com/report"

s3 = boto3.client('s3')


def upload_to_aws(local_file, bucket, s3_file):
    s3 = boto3.client('s3')

    try:
        s3.upload_file(local_file, bucket, s3_file)
        print("Upload Successful")
        return True
    except FileNotFoundError:
        print("The file was not found")
        return False
    except NoCredentialsError:
        print("Credentials not available")
        return False


querystring = {"action":"list"}

headers = {
    'X-Requested-With': "Curl Sample",
    'Authorization': "Basic xxxxxxxxxxxxxxxxxxx",
    'Accept': "*/*",
    'Cache-Control': "no-cache",
    'Host': "api.mylink.com",
    'Accept-Encoding': "gzip, deflate",
    'Connection': "keep-alive",
    'cache-control': "no-cache"
    }

response = requests.request("GET", url, headers=headers, params=querystring)


root = ET.fromstring(response.content)
for child in root.iter(tag='ID'):
 idlist = print(child.text)
 ID=child.text
 querystring_fetch = {"action":"fetch","id":ID}
 response_fetch = requests.request("GET", url, headers=headers, params=querystring_fetch)
 with open(ID + "fetch.pdf","wb") as f:
  f.write(response_fetch.content) # this writes it to local drive 
  upload_to_aws('ID + "fetch.pdf"', 'MY_S3_BUCKET', '%s/%s' %('FOLDER', 'ID + "_fetch.pdf"')) # <--- this line is the key. It's suppose to write to S3, but it does not.

Проблема где-то с определением имени файла в этой строке:

upload_to_aws('ID + "fetch.pdf"', 'MY_S3_BUCKET', '%s/%s' %('FOLDER', 'ID + "_fetch.pdf"'))
0
Ajax 21 Дек 2019 в 05:30

1 ответ

Лучший ответ

Мне кажется, что у вас есть дополнительные одинарные кавычки при создании имени ключа. Я думаю, что строка должна быть:

key = ID + "fetch.pdf"
upload_to_aws(key, 'MY_S3_BUCKET', '%s/%s' % ('FOLDER', key)) # <--- this line is the key. It's suppose to write to S3, but it does not.
1
user212514 21 Дек 2019 в 02:49