是否可以生成文件并将其上传到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
答案 0 :(得分:2)
您正在尝试写入根目录'/'。因此,您的应用需要root权限(使用sudo运行;出于安全考虑,强烈建议不要使用此权限)或指定tmp文件夹的路径以在其中存储这些文件(看起来您想使用“ ./report.csv”-文件将被创建进入工作目录)。