Я пытаюсь загрузить изображения и отобразить их в URL-адресе.

Мой сервер:

app = Flask(__name__)
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
UPLOAD_FOLDER = os.path.join(APP_ROOT, 'static/uploads')
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/post_pic',methods=['POST','GET'])
def post_picture():
    if request.method == 'POST':
        file1 = request.files['image']
        path1 = os.path.join(app.config['UPLOAD_FOLDER'], file1.filename)
        file1.save(path1)
        return_status = {"success":"true"}
        return jsonify(return_status)

    list_of_files = glob.glob(UPLOAD_FOLDER + '/*') # get latest file
    latest_file = max(list_of_files, key=os.path.getctime)    
    return render_template("show_pic3.html", file1=latest_file)

show_pic3.hrml код:

<html>
<head>
    <title>show_pic</title>
</head>
<body>
    <img src="{{url_for('static', filename=file1)}}" align= "middle" />
</body>
</html>

Затем я использую запрос POST для загрузки изображения, которое не показывает никаких проблем. но после того, как я использовал GET на той же конечной точке, изображение стало поврежденным.

enter image description here

0
Win Wongsawatdichart 29 Мар 2021 в 22:52

1 ответ

Лучший ответ

Обычно веб-сервер обрабатывает загрузку контента (nginx). Если вы пытаетесь сохранить контент, лучший вариант - сохранить его где-нибудь в определенном месте и использовать send_from_directory с получением изображения в качестве вызова API.

Быстрое решение вашего вопроса - заменить /app/static/ ничем в конце перед рендерингом.

list_of_files = glob.glob(UPLOAD_FOLDER + '/*') # get latest file
latest_file = max(list_of_files, key=os.path.getctime).replace("/app/static/","")
return render_template("show_pic3.html", file1=latest_file)
1
coldy 29 Мар 2021 в 20:18