Создайте и загрузите файл на s3 с flask - PullRequest
0 голосов
/ 25 февраля 2020

возможно ли создать и загрузить файл в s3?

Я пытался реализовать это приложение flask, но оно умирает с этой ошибкой:

OSError: [Errno 30] Read-only file system: '/report.csv'

Это my app.py:

@app.route("/upload/<string:START_REPORT>/<string:STOP_REPORT>/<string:IDS>/", methods=['POST'])
def upload(START_REPORT, STOP_REPORT, IDS):
    """
    Function to upload a file to an S3 bucket
    """
    os.environ["START_REPORT"] = START_REPORT
    os.environ["STOP_REPORT"] = STOP_REPORT
    os.environ["IDS"] = IDS
    dft, filename = report_visit.report() 
    dft.to_csv(filename, index=False) # <-- Error here
    object_name = filename
    s3_client = boto3.client(
        "s3",
        region_name='eu-west-1',
        endpoint_url="url",
        aws_access_key_id="key",
        aws_secret_access_key="key"
    )
    with open(filename, "rb") as f:
        response = s3_client.upload_fileobj(f, app.config['UPLOAD_FOLDER'], f.filename)
    return response

if __name__ == '__main__':
    app.run (debug=True, port='8080', host='127.0.0.1')

, где имя файла 'report.csv'

Это запрос почты, который я делаю с почтальоном:

POST http://localhost:8080/upload/2020_2_10_0_0_0_0/2020_2_10_1_0_0_0/138/

Я думаю, что трудно привести правильный рабочий пример, но любые предложения приветствуются

функция report_visit.report() возвращает pandas фрейм данных и имя файла

Любое предложение будет оценил, спасибо

Маттео

1 Ответ

2 голосов
/ 25 февраля 2020

Вы пытаетесь записать в каталог root '/'. Итак, вашему приложению нужны разрешения root (запускать с помощью sudo; настоятельно не рекомендуется из соображений безопасности) или укажите какой-нибудь путь к папке tmp для хранения этих файлов (похоже, вы хотите использовать «./report.csv» - файл будет быть создан в рабочий каталог).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...