【问题标题】:How to store an uploaded file in Heroku using Flask in Python?如何在 Python 中使用 Flask 将上传的文件存储在 Heroku 中?
【发布时间】:2020-08-24 07:27:42
【问题描述】:

我制作了一个可以上传图片的应用。在 Flask 的本地服务器中一切正常。但是当我在 Heroku 上部署我的应用程序时,在上传图像后,它并没有存储在上述目录中。请任何形式的帮助将不胜感激。

from flask import Flask,redirect,request,url_for
from flask import render_template as ren
import os
from werkzeug.utils import secure_filename
import uuid
app = Flask(__name__)

# FILE_PATH = os.environ.get("FILE_PATH")
FILE_PATH = "templates/uploads/"

@app.route("/")
def home():
    return ren("index.html")

@app.route("/img-upload", methods=['GET','POST'])
def upload():
    if request.method == 'POST':

        if request.files:

            image = request.files['image']
            id = uuid.uuid1()

            if secure_filename(image.filename):
                filename = image.filename
                ext =  filename.rsplit(".",1)[1]
                filename = id.hex + "." + ext  ######### FileName of uploaded file ############
                file_path = os.path.join(str(FILE_PATH),secure_filename(filename))
                print(file_path)
                image.save(file_path)
                return redirect(request.url)

    return ren("index.html")


if __name__ == '__main__':
     app.run(debug=True)

【问题讨论】:

    标签: python flask heroku


    【解决方案1】:

    Heroku 有一个临时文件系统——这意味着该文件仅在 dyno 运行时保存在 Heroku 中,之后会被删除。

    我将使用的选项是 AWS S3,我在其中存储了图像。

    这是一个很好的链接,可帮助您开始使用 AWS S3 以及如何设置和使用它:https://www.youtube.com/watch?v=kt3ZtW9MXhw

    设置 AWS S3 存储桶后:

    import boto3
    
    BUCKET = 'my-bucket-name'
    s3 = boto3.client("s3", aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID'), aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY'))
    bucket_resource = s3
    
    bucket_resource.upload_file(Bucket = BUCKET, Filename=picture_fn, Key=picture_fn) # uploading
    
    # retrieving
    image_file = s3.generate_presigned_url('get_object',
                                    Params={
                                        'Bucket': BUCKET,
                                        'Key': picture_fn,
                                    },                                  
                                    ExpiresIn=3600)
    
    # deleting
    s3.delete_object(Bucket=BUCKET, Key=picture_fn)
    

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2016-06-09
      • 1970-01-01
      • 2020-05-30
      • 2023-03-25
      相关资源
      最近更新 更多