JRP-Version-1.2.2023.12.30
Version : 1.2.2023.12.30
修改项:
增加部分格式的文本和视频浏览的功能
self.app.route('/view_file/<path:file_name>')(self.view_file) # 预览
self.app.route('/preview/<path:file_name>')(self.preview) # 跳转预览网页
self.app.route('/send_view_file/<path:filename>')(self.send_view_file) # 根据不同文件,发送文件给HTML显示
函数块:
def view_file(self, file_name):
if not file_name.startswith('/'):
if not re.match('.:', file_name):
file_name = '/' + file_name
return render_template('index.html',
foldername=file_name,
show_view_file=True,
show_upload=False
)
def preview(self, file_name):
type_ = file_name.split('.')[-1] # 防止多个 .. 造成判断错误
if not file_name.startswith('/'):
if not re.match('.:', file_name):
file_name = '/' + file_name
return render_template('preview.html',
filename=file_name,
pre_type=type_
)
def send_view_file(self, filename):
# 设置文件文件夹路径
if not filename.startswith('/'):
if not re.match('.:', filename):
filename = '/' + filename
VIDEO_FOLDER = os.path.dirname(filename)
file_name = os.path.basename(filename)
self.app.config['UPLOAD_FOLDER'] = VIDEO_FOLDER
# 使用send_from_directory发送文件
return send_from_directory(self.app.config['UPLOAD_FOLDER'], file_name)
由于需要有个浏览页面,所以添加了新的一个 HTML模版preview.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Video Player</title>
<style>
#video-container {
position: relative;
}
</style>
</head>
<body>
<!-- 使用 HTML5 的 video 元素 -->
<div id="video-container">
<li><a href="{{ url_for('mainweb') }}">首页</a></li>
{% if pre_type in ["mp4", "mov"] %}
<h1>视频播放</h1>
<h1>{{ video_type }}</h1>
<video id="my-video" width="640" height="360" controls>
{% if pre_type == "mp4" %}
<source src="{{ url_for('send_view_file', filename=filename) }}" type="video/mp4">
{% elif pre_type == "mov" %}
<source src="{{ url_for('send_view_file', filename=filename) }}" mimetype="/video/quicktime">
{% endif %}
</video>
{% elif pre_type in ["txt", "log", "csv"] %}
<h1>文本浏览</h1>
<p><a href="{{ url_for('send_view_file', filename=filename) }}" target="_blank">打开文本文件</a></p>
{% else %}
<h1>暂不支持 {{pre_type}} 后缀文件浏览 </h1>
{% endif %}
</div>
</body>
</html>
这里用到的主要功能:
<!--播放mp4格式文件-->
<source src="{{ url_for('send_view_file', filename=filename) }}" type="video/mp4">
<!--播放mov格式文件-->
<source src="{{ url_for('send_view_file', filename=filename) }}" mimetype="/video/quicktime">
<!--width="640" 视频窗口默认宽度 height="360" 默认高度 controls 添加播放,暂停声音等等的控件-->
<video id="my-video" width="640" height="360" controls>
其他几个模板也有些许修改,包括在使用的时候遇到的一些问题
效果展示可以直接看这个录屏,手机操作的,所以预览文本文件直接下载了,在电脑上是新开一个窗口显示文本文件:
JRP