簡體   English   中英

使用boto3和python flask將CSV文件上傳到S3存儲桶時出現錯誤500

[英]Error 500 while Uploading CSV file to S3 bucket using boto3 and python flask

看了所有可能的選擇。 我正在使用boto3和python3.6將文件上傳到s3存儲桶,有趣的是json甚至.py文件正在上傳時,在上傳CSV時拋出Error 500。 成功升級后,我將返回一個json以檢查所有值。

    import boto3
    from botocore.client import Config

    @app.route("/upload",methods = ['POST','GET'])
    def upload(): 
    if request.method == 'POST':
        file = request.files['file']
        filename = secure_filename(file.filename)
        s3 = boto3.resource('s3', aws_access_key_id= os.environ.get('AWS_ACCESS_KEY_ID'), aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY'),config=Config(signature_version='s3v4'))
        s3.Bucket(os.environ.get('S3_BUCKET')).put_object(Key=filename, Body=open(filename, 'rb'), ContentEncoding='text/csv')
        return jsonify({'successful upload':filename, 'S3_BUCKET':os.environ.get('S3_BUCKET'), 'ke':os.environ.get('AWS_ACCESS_KEY_ID'), 'sec':os.environ.get('AWS_SECRET_ACCESS_KEY'),'filepath': "https://s3.us-east-2.amazonaws.com/"+os.environ.get('S3_BUCKET')+"/" +filename})

請幫忙!!

因為文件xyz.csv不存在,所以您收到FileNotFoundError

這可能是因為upload()中的代碼實際上並未保存上傳的文件,它只是為其獲取一個安全名稱,然后立即嘗試將其打開-失敗。

它適用於其他文件可能是由於這些文件已經存在,可能是測試遺留的事實,所以沒有問題。

獲取安全文件名后,嘗試使用save()將文件save()到文件系統中:

upload_file = request.files['file']
filename = secure_filename(upload_file.filename)
upload_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

然后上傳(假設您已配置UPLOAD_FOLDER ):

with open(os.path.join(app.config['UPLOAD_FOLDER'], filename), 'rb') as f:
    s3.Bucket(os.environ.get('S3_BUCKET')).put_object(Key=filename, Body=f, ContentEncoding='text/csv')
    return jsonify({...})

無需將文件實際保存到文件系統; 可以使用upload_file對象的stream屬性將其直接流式傳輸到S3存儲桶:

upload_file = request.files['file']
filename = secure_filename(upload_file.filename)

s3 = boto3.resource('s3', aws_access_key_id='key', aws_secret_access_key='secret')
s3.Bucket('bucket').put_object(Key=filename, Body=upload_file.stream, ContentType=upload_file.content_type)

要使其更通用,您應該使用上載文件的content_type屬性,如上所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM