我正在嘗試創建一個私有檔案主機,并且我將它設定為在/media/someSong.mp3呼叫例如 url 時回傳一個 send_file() 。
但是我想讓它更有風格,所以當您訪問時/media/someSong.mp3,而不是您的瀏覽器嘗試在其中播放該 MP3,它將使用一個帶有標簽的 HTML 頁面,該標簽決議由引數發送的 send_file()。
目前,我有這個:
@app.route('/media/<mediaID>')
def mediaStuff(mediaID):
try:
return render_template('parse-it.html', title=title, media_file=send_file(f'./media/{mediaID}'))
# return send_file(f'./media/{mediaID}')
except FileNotFoundError:
return 'The media you tried to view doesn\'t exist.'
這是我的templates/parse-it.html檔案中的內容:
{% extends "base.html" %}
{% block content %}
<h1>You are now viewing ...!</h1>
<source src={{media_file}}>
{% endblock %}
但是我看到的只是 <Response 200 OK> 或類似的東西。看不到檔案!
我會使用 get_file() 然后在該 media_file 引數中回傳 Response(getfileVar) 嗎?
uj5u.com熱心網友回復:
send_file回傳一個Response物件。將它傳遞給模板是沒有意義的。
所以你需要兩個端點。一種用于顯示包含媒體元素的網站,另一種用于從目錄中流式傳輸檔案。我建議使用send_from_directory這個。
這是一個簡單的示例,它列出了目錄中的所有檔案并提供它們以供播放或查看。根據檔案的 MIME 型別進行區分。這是通過 確定的guess_type。
exmpale 使用實體路徑來確保檔案和應用程式的分離。
import os
from flask import (
Flask,
render_template,
send_from_directory
)
from mimetypes import guess_type
app = Flask(__name__)
app.config['MEDIA_FOLDER'] = os.path.join(app.instance_path, 'media')
try:
os.makedirs(app.config['MEDIA_FOLDER'])
except:
pass
def listfiles(target):
for filename in os.listdir(target):
mimetype = guess_type(os.path.join(target, filename))
yield (
filename,
mimetype,
)
@app.route('/')
def index():
files = listfiles(app.config['MEDIA_FOLDER'])
return render_template('index.html', **locals())
@app.route('/media/<path:filename>')
def media(filename):
return send_from_directory(
app.config['MEDIA_FOLDER'],
filename
)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
{% for filename, type in files -%}
<div>
{% set mimetype, encoding = type -%}
{% if mimetype.startswith('audio') -%}
<audio controls>
<source src="{{ url_for('media', filename=filename) }}" type="{{ mimetype }}">
</audio>
{% elif mimetype.startswith('image') -%}
<img src="{{ url_for('media', filename=filename) }}" />
{% endif -%}
</div>
{% endfor -%}
</body>
</html>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439580.html
上一篇:我不知道為什么在將變數發送到HTML時它顯示UnboundLocalError。我嘗試了類似的Stackoverflow解決方案,但沒有解決
