如何解决通过boto3将文件上传到AWS s3的问题?

时间:2019-04-05 17:52:27

标签: python amazon-s3 upload boto3

我正在设置一个flask应用程序,用户可以在其中上传存储在aws s3存储桶中的个人资料图像。使用boto3,我可以将文件上传到s3。但是上传后,我得到的文件大小为0。

我尝试了在0-bytes-fileput-method-loads-0github中找到的所有答案,但无法正常工作。以下是我的代码。

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代码一定存在问题。

0 个答案:

没有答案