Description

客户端显示服务端某目录下的所有视频文件,可播放。

Solution

后端提供两个接口,一个返回目录下的所有文件名,一个返回视频数据。

from flask import Flask, jsonify, render_template
from flask_cors import CORS
import osapi

app = Flask(__name__)

app.config['JSON_AS_ASCII'] = False
app.config['JSONIFY_MIMETYPE'] = "application/json;charset=utf-8"

CORS(app, resources=r'/*')


@app.route('/list/')
def api_list():
    return jsonify(osapi.getFileList("resource"))


@app.route('/video/<name>/')
def api_video(name):
    return osapi.getBinaryFile("resource/%s" % name)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

需要一些辅助

import os
def getFileList(file_dir):
    for root, dirs, files in os.walk(file_dir):
        return files


def getBinaryFile(filename):
	f = open(filename, "rb")
	data = f.read()
	f.close()
	return data

前端 JS 获取并通过修改 DOM 内容来展示

<div id="list"> </div>

<script>
    var httpRequest = new XMLHttpRequest();
    httpRequest.open('GET', 'http://10.203.172.202:5000/list/', true);
    httpRequest.send();

    httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState == 4 && httpRequest.status == 200) {
            var json = JSON.parse(httpRequest.responseText);
            for (var item in json) {
                var filename = json[item];
                var tmp = document.getElementById("list").innerHTML;
                document.getElementById("list").innerHTML += filename + "<br/><video width=\"320\" height=\"240\" controls><source src=\"http://10.203.172.202:5000/video/" + filename + "/\" type=\"video/mp4\"> </video> <br/> <br/>";
                console.log(filename);
            }
        }
    };
</script>