2017-09-07 15 views
0

まず、HTMLフォームからサーバーに保存せずにファイルをS3に直接アップロードします。私はBoto3とFlaskを使用しています。フラスコとHTMLコードは以下に掲載されています。私はS3への接続をテストしたので、私のHTMLフォームに問題があるはずです。エラーは「ファイル名は文字列でなければなりません」と表示されます。ご協力いただきありがとうございます。FlaskとBoto3を使ってHTMLフォームからファイルをアップロードする

フラスコ:

.route('/upload', methods=['GET', 'POST']) 
@login_required 
def upload(): 
    try: 
     latestfile = request.form.get('filetoupload') 
     conn = boto3.client('s3', region_name="eu-west-1", endpoint_url="example.com", aws_access_key_id='the access key here', aws_secret_access_key='the secret key here',) 
     conn.create_bucket(Bucket="mytestbucket22") 
     bucket_name = "mytestbucket22" 
     conn.upload_file(latestfile, bucket_name, latestfile) 
     return render_template('dashboard.html', name=current_user.username, sumsg="Upload done!") 
    except Exception as ermsg: 
     print(ermsg) 
     return render_template('dashboard.html', name=current_user.username, ermsg=ermsg) 

HTML:

<form action="./upload" method="post" enctype="multipart/form-data"> 
    <input name="filetoupload" type="file"> 
    <button type="submit" class="buttonformatting" onclick="showImage();">Download</button></a> 
</form> 

答えて

1

あなたはフラスコ要求からアップロードされたファイルを取得したら、あなたはconn.upload_fileobj()メソッドを使用して、それをアップロードすることができます。現在、conn.upload_file()を使用していますが、ディスク上のファイルを指しているファイル名が必要です。

file = request.files['filefield'] 
conn.upload_fileobj(file, 'mybucket', 'mykey') 

詳しいドキュメントや情報のようなものを実行します。上の記事を読むまでhttp://flask.pocoo.org/docs/0.12/api/#flask.Request.files

フラスコ要求オブジェクトががFileStorageオブジェクトは、通常のPythonのファイルのように振る舞うあなたを与えますBoto3のドキュメントはこちら:https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.upload_fileobj

関連する問題