使用flask生成文件并将其上传到s3

时间:2020-02-25 18:43:17

标签: python flask amazon-s3

是否可以生成文件并将其上传到s3?

我尝试实现此flask应用程序,但因以下错误而死:

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

这是我的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()返回一个熊猫数据框和文件名名称

任何建议将不胜感激,谢谢

Matteo

1 个答案:

答案 0 :(得分:2)

您正在尝试写入根目录'/'。因此,您的应用需要root权限(使用sudo运行;出于安全考虑,强烈建议不要使用此权限)或指定tmp文件夹的路径以在其中存储这些文件(看起来您想使用“ ./report.csv”-文件将被创建进入工作目录)。