Tôi đang sử dụng flask và cố gắng thực hiện điều gì đó rất đơn giản bằng cách sử dụng hướng dẫn nhanh, chỉ chạy trên máy của tôi (máy chủ cục bộ). Tôi tạo một biểu mẫu tải lên đơn giản tải lên thành công tệp hình ảnh. Sau đó tôi muốn chuyển hình ảnh này dưới dạng biến số cho một số template.html
để hiển thị trong một trang. Tệp template.html
hiển thị tốt, nhưng hình ảnh luôn là broken link image symbol
. Tôi đã thử một số con đường khác nhau, nhưng tôi có cảm giác tôi đang làm những việc sai một chút.Cách chuyển hình ảnh đã tải lên lên template.html trong Flask
import os
from flask import Flask, request, redirect, url_for, send_from_directory,
render_template
UPLOAD_FOLDER = '/home/me/Desktop/projects/flask/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file', filename=filename))
return '''
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=Upload>
</form>
'''
@app.route('/uploads/<filename>')
def uploaded_file(filename):
filename = 'http://127.0.0.1:5000/uploads/' + filename
return render_template('template.html', filename = filename)
if __name__ == '__main__':
app.run()
Đây là template.html
:
<!doctype html>
<title>Hello from Flask</title>
{% if filename %}
<h1>some text<img src="{{filename}}"> more text!</h1>
{% else %}
<h1>no image for whatever reason</h1>
{% endif %}
Làm thế nào tôi có thể vượt qua các tập tin hình ảnh được tải lên template.html
vì vậy nó sẽ hiển thị một cách chính xác?
Cảm ơn
Có lẽ đây là một câu hỏi ngớ ngẩn nhưng khi sẽ send_file mỗi kết thúc nhận được gọi với điều này thêm vào? – Uzebeckatrente
@Uzebeckatrente, thẻ '' trong mẫu trỏ đến '/ uploads/', được định tuyến đến send_file. –
Miikka
Xin chào @Miikka Tôi đang thử điều này trên máy chủ đám mây. Cùng một logic doesnot làm việc cho tôi. Nó cho thấy đường dẫn hình ảnh đầy đủ bên trong thẻ src. Bạn có thể đề nghị bất cứ điều gì ?? –