Я настраиваю приложение фляги, где пользователь может загрузить изображение профиля, которое хранится в корзине aws s3.Используя boto3, я могу загрузить файл на s3.Но после загрузки я получаю размер файла равным 0.
Я перепробовал все ответы, найденные в 0-байтовом файле , put-method-load-0 и github , но не смог заставить его работать.Ниже приведен мой код.
route.py
@users.route('/edit_profile', methods=['GET', 'POST'])
def edit_profile():
form = EditProfileForm()
if form.validate_on_submit():
file = request.files['user_image']
if file:
file.filename = secure_filename(file.filename)
url = upload_file_s3(file)
current_user.profile_image_url = url
database.update(current_user._get_current_object())
flash('Your Profile has been updated!', 'success')
return redirect(url_for('users.edit_profile'))
return render_template('users/edit_profile.html', form=form)
helper.py
def upload_file_s3(file, acl="public-read"):
app = current_app._get_current_object()
s3 = boto3.client('s3', aws_access_key_id='xxxx',
aws_secret_access_key='yyyy'
bucket_name = 'zzzz'
s3.upload_fileobj(
file,
bucket_name,
file.filename,
ExtraArgs={
"ACL": acl,
"ContentType": file.content_type
}
)
return "{}{}".format(app.config["S3_LOCATION"], file.filename)
update.html
<form method="POST" action="" enctype="multipart/form-data">
<input id="csrf_token" name="csrf_token" type="hidden" value="ImE2NzV">
<div class="form-group">
<label for="user_image">Add Profile Picture</label>
<input class="form-control-file" id="user_image" name="user_image" type="file">
</div>
<div class="form-group mt-4">
<input class="btn" id="submit" name="submit" type="submit" value="Update Profile">
</div>
</form>
Однако ябыл в состоянии загружать файлы через cli.
s3 = boto3.client('s3',aws_access_key_id='xxxx', aws_secret_access_key='yyyy' )
bucketname = 'zzzz'
filename = 'dog.jpg'
s3.upload_file(filename, bucket_name, filename)
Так как я могу загружать файлы через cli, в коде flask / python должно быть что-то не так.