Проблемы при загрузке файлов publi c на S3 через python - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь загрузить несколько изображений в мое ведро s3, которое настроено через bucketeer (плагин heroku), тем не менее, должно работать так же. В принципе, у меня нет проблем с загрузкой личных изображений, но я не могу их опубликовать. Я могу загружать изображения c через CLI aws. Единственный метод, который я попробовал, - это использовать дополнительные аргументы и установить для ACL значение publi c read. Кроме того, в документации кулера говорится:

"Bucketeer’s default setting is to keep your data private, which in AWS 
terms means the default acl for objects is private.

However, any objects uploaded to the “public” folder (just prefix your 
object key with the string public/) are made world-accessible and available 
via CORS."

Итак, я попытался загрузить файл с префиксом / publi c, как показано ниже, но я не знаю, вызывает ли это проблему или нет .

Мой код:

UPLOAD_FOLDER = "public"

def upload_file(file_name, bucket):
    object_name = file_name
    s3_client = boto3.client('s3')
    response = s3_client.upload_file(f"public/{file_name}", bucket, 
    object_name, 
    ExtraArgs={'ACL': 'public-read'})
    return response

def download_file(file_name, bucket):
    s3 = boto3.resource('s3')
    print(s3)
    output = f"downloads/{file_name}"
    s3.Bucket(bucket).download_file(file_name, output)
    return output

@app.route("/upload/file", methods=['POST'])
def upload():
    if request.method == "POST":
        f = request.files['Image']
        f.save(os.path.join(UPLOAD_FOLDER, f.filename))
        upload_file(f"public/{f.filename}", S3_BUCKET)
        return redirect("/gallery")

@app.route("/download/<filename>", methods=['GET'])
def download(filename):
    if request.method == 'GET':
        output = download_file(filename, S3_BUCKET)
        print(output)
        return send_file(output, as_attachment=True)
...