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

前言

需求说明

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

技术栈:

前端采用原生HTML+JavaScript

后端采用Flask框架

前端代码

操作步骤:

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

完整代码如下:

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

<!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. 如果不存在则保存文件,如果存在则不进行任何操作

完整代码如下:

from flask import Flask, request, jsonify
from flask_cors import CORSapp = 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\\' + namewith 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)方法来读取指定路径的视频文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习之vim跳转到特定行数

参考的博客&#xff1a;《Vim跳到最后一行的方法》 《oeasy教您玩转vim - 14 - # 行头行尾》 《Linux&#xff1a;vim 中跳到首行和最后一行》 想要跳到特定行的话&#xff0c;可以在命令模式和正常模式进行跳转。要是对于vim的四种模式不太熟的话&#xff0c;可以到博客《Linu…

在 Python 中打印二叉树

文章目录 Python 中的二叉树树的遍历顺序中序遍历树先序遍历树后序遍历二叉树在Python中的实现使用 Python 打印整个二叉树代码分析本文将讨论二叉树以及我们如何使用它。 我们还将看到如何使用 Python 打印它。 我们将了解在处理二叉树时使用的术语。 我们还将研究使用 Pytho…

使用VSCODE链接Anaconda

打代码还是在VSCODE里得劲 所以得想个办法在VSCODE里运行py文件 一开始在插件商店寻找插件 但是没有发现什么有效果的 幸运的是VSCODE支持自己选择Python的解释器 打开VSCODE 按住CtrlShiftP 输入Select Interpreter 如果电脑已经安装上了Python的环境 VSCODE会默认选择普通…

C++auto 关键字

auto 关键字在 C 语言中就已经存在了&#xff0c;只不过在 C 语言中它的作用是声明自动变量&#xff0c;例如 auto int z 123 ; z 本来是局部变量&#xff0c;加上 auto 后变成了局部的自动变量&#xff0c;就是当前变量的生存周期是由编译器自动决定的&#xff0c…

Redis中的渐进式遍历-Scan命令

之前我们学习过遍历命令keys,而keys *是一次性的把整个redis中所有的key都获取到.在不知道当前redis中有多少key的情况下,这个操作是非常危险的,可能会一下子得到太多的key而阻塞redis服务器.从而使其他redis客户端卡顿. 通过渐进式遍历,就可以做到,既可以获取到所有的key,同时…

视频集中存储EasyCVR平台播放一段时间后出现黑屏是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

零代码编程:用ChatGPT批量提取flash动画swf文件中的mp3

文件夹&#xff1a;C:\迅雷下载\有声绘本_flash[淘宝-珍奥下载]\有声绘本 flash&#xff0c;里面有多个flash文件&#xff0c;怎么转换成mp3文件呢? 可以使用swfextract工具从Flash动画中提取音频&#xff0c;下载地址是http://www.swftools.org/download.html&#xff0c;也…

Python学习-shutil模块和OS模块学习

shutil模块 针对文件的拷贝&#xff0c;删除&#xff0c;移动&#xff0c;压缩和解压操作 # 1.copyfileobj只能复制文件内容&#xff0c;无法复制权限#复制文件时&#xff0c;要选择自己有权限的目录执行操作&#xff0c;创建的文件会根据系统umask设定的参数来指定用户权限 s…

云计算和大数据技术

一、云计算技术的概述 云计算是一种基于互联网的计算模式&#xff0c;它将计算资源&#xff08;包括硬件和软件&#xff09;通过网络提供给用户&#xff0c;使用户能够方便地访问和使用这些资源。云计算技术可以分为三个层次&#xff1a;基础设施即服务 (IaaS)&#xff0c;平台…

理解交叉熵(Cross Entropy)

交叉熵&#xff08;Cross-Entropy&#xff09;是一种用于衡量两个概率分布之间的距离或相似性的度量方法。在机器学习中&#xff0c;交叉熵通常用于损失函数&#xff0c;用于评估模型的预测结果与实际标签之间的差异。 在分类问题中&#xff0c;交叉熵损失函数通常用于多分类问…

项目构建工具maven的基本配置+idea 中配置 maven

&#x1f451; 博主简介&#xff1a;知名开发工程师 &#x1f463; 出没地点&#xff1a;北京 &#x1f48a; 2023年目标&#xff1a;成为一个大佬 ——————————————————————————————————————————— 版权声明&#xff1a;本文为原创文…

数据结构与算法—双链表

前言 前面有很详细的讲过线性表(顺序表和链表)&#xff0c;当时讲的链表以单链表为主&#xff0c;但在实际应用中双链表有很多应用场景&#xff0c;例如大家熟知的LinkedList。 双链表与单链表区别 单链表和双链表都是线性表的链式实现&#xff0c;它们的主要区别在于节点结构…

一文掌握 Apache SkyWalking

Apache SkyWalking SkyWalking是一个开源可观测平台&#xff0c;用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来保持分布式系统的清晰视图&#xff0c;甚至跨云。它是一种现代APM&#xff0c;专为云原生、基于容器的分布式系…

【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】AlexNet模型算法详解前言AlexNet讲解卷积层的作用卷积过程特征图的大小计算公式Dropout的作用AlexNet模型结构 AlexNet Pytorch代码完整代码总结 前言 AlexNet是…

Apache Doris 是什么

Apache Doris 是一个开源的、基于MPP&#xff08;Massively Parallel Processing&#xff09;架构的SQL数据仓库。它旨在提供高性能、高可靠性的数据分析服务&#xff0c;特别适合处理大规模数据集。 Doris 的主要特点包括&#xff1a; 高性能&#xff1a;通过MPP架构&#xf…

【网络协议】

网络协议 1 网络通讯1.1 防火墙1.2 子网掩码1.3 网关1.4 2 SSH2.1 SSH2.2 SSH12.3 SSH2 3 Telnet4 Telnet/SSL5 NFS6 TFTP7 FTP8 SFTP9 HTTP10 HTTPS11 NAT12 加密 1 网络通讯 1.1 防火墙 所谓“防火墙”&#xff0c;是指一种将内部网和公众访问网(如Internet)分开的方法&…

技术分享 | app自动化测试(Android)-- 属性获取与断言

断言是 UI 自动化测试的三要素之一&#xff0c;是 UI 自动化不可或缺的部分。在使用定位器定位到元素后&#xff0c;通过脚本进行业务操作的交互&#xff0c;想要验证交互过程中的正确性就需要用到断言。 常规的UI自动化断言 分析正确的输出结果&#xff0c;常规的断言一般包…

Linux常用指令(八)——管道过滤

Linux管道过滤 8.1 cut命令&#xff0c;剪切指定范围的字段8.2 grep命令&#xff0c;在文本中查找匹配字符串8.3 wc命令&#xff0c;计数工具8.4 sort排序命令8.5 uniq去重命令8.6 sed进行文本替换过滤 更加完整的Linux常用指令 在Linux中&#xff0c;管道&#xff08;pipelin…

蓝桥杯练习

即约分数 题目 思路 遍历所有的x&#xff0c;y&#xff0c;判断x/y是不是即越约分数。 代码 #include <iostream> using namespace std; int gcd(int x,int y) {int r;while(y!0){rx%y;xy;yr;}return x; } int main() {// 请在此输入您的代码int sum4039;//1/y和x/1都…

前端食堂技术周刊第 103 期:10 月登陆 Web 平台的新功能、TS 5.3 RC、React 2023 状态、高并发的哲学原理、Web 资源加载优先级

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;夏梦玫珑 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…