JavaScript+Flask 实现视频上传的简单demo

前言

需求说明

  1. 在网页上选择本地视频并上传到后端服务器
  2. 后端接收到视频后存储到本地,然后进行处理

技术栈:

前端采用原生HTML+JavaScript

后端采用Flask框架

前端代码

操作步骤:

  1. 选中视频文件
  2. 获取文件内容及文件名
  3. 将文件内容和文件名封装到一个FormData对象中
  4. 发起请求,将文件上传到后端服务器

完整代码如下:

有关FormData的使用参考:FormData 对象的使用 - Web API 接口参考 | MDN

html 复制代码
<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>视频上传</title>
  </head>

  <body>
    <input type="file" id="video" accept="video/mp4">
    <button onclick="upload()">上传视频</button>

    <script>
      function upload() {
        let videoUpload = document.getElementById('video')
        let video = videoUpload.files[0]

        let formData = new FormData()
        formData.append('video', file) //文件
        formData.append('name', file.name) //文件名

        let xhr = new XMLHttpRequest()
        xhr.open('POST', 'http://10.241.4.160:5000/upload', true)
        xhr.responseType = 'text' //响应类型
        xhr.onload = function () {
          if (xhr.status === 200) {
            console.log(xhr.response); //响应内容 (上传成功/文件已存在)
          } else {
            console.error('请求失败,状态码:' + xhr.status);
          }
        };
        xhr.send(formData)
      }
    </script>
  </body>
</html>

后端代码

操作步骤:

  1. 接收前端传来的请求参数
  2. 根据文件名判断当前文件是否已经存在
  3. 如果不存在则保存文件,如果存在则不进行任何操作

完整代码如下:

python 复制代码
from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)  #允许所有来源的跨域请求

# 文件上传
@app.route('/upload',  methods=["POST"])
def upload():
    file = request.files['file'].stream.read() #视频文件
    name = request.form['name'] #文件名(注意是表单格式)
    print(video_exist(name))
    if not video_exist(name):
        # 保存视频文件到本地
        file_path = os.getcwd() + '\\videos\\' + name
        with open(file_path,'ab') as f:
            f.write(file)
        return '上传成功'
    else:
        return '文件已经存在'

# 判断文件是否存在
def video_exist(video_name):
    path = os.getcwd() + '\\videos\\'
    video_path = os.path.join(path,video_name)
    return os.path.isfile(video_path)
    
if __name__ == '__main__':
    app.run()

后续的视频处理可以考虑使用cv2 来进行,例如通过**cv2.VideoCapture(path)**方法来读取指定路径的视频文件

相关推荐
Ranye1238 分钟前
从 JS 到 Dart:语法基础
javascript·flutter·dart
Ama_tor41 分钟前
网页制作06-html,css,javascript初认识のhtml如何建立超链接
javascript·css·html
烂蜻蜓1 小时前
Uniapp 中布局魔法:display 属性
前端·javascript·css·vue.js·uni-app·html
视觉CG1 小时前
【Viewer.js】vue3封装图片查看器
开发语言·javascript·vue.js
java1234_小锋2 小时前
一周学会Flask3 Python Web开发-redirect重定向
前端·python·flask·flask3
琑952 小时前
nextjs项目搭建——头部导航
开发语言·前端·javascript
码界筑梦坊2 小时前
基于Flask的短视频流量数据可视化系统的设计与实现
大数据·python·信息可视化·flask·毕业设计
Gazer_S2 小时前
【Windows系统node_modules删除失败(EPERM)问题解析与应对方案】
前端·javascript·windows
沙子迷了蜗牛眼3 小时前
antv G6绘制流程图
开发语言·javascript·ecmascript
乌木前端3 小时前
包管理工具lock文件的作用
前端·javascript