flask服务器实现上传视频功能
时间: 2023-11-22 13:54:54 浏览: 39
要在 Flask 服务器上实现上传视频功能,可以使用 Flask 自带的 `request` 和 `FileStorage` 模块。
首先,需要在 HTML 页面上添加一个表单,用于上传视频文件。表单中需要包含一个 `input` 元素,其 `type` 属性设置为 `file`,以及一个提交按钮。
```html
<form method="POST" enctype="multipart/form-data">
<input type="file" name="video">
<button type="submit">上传</button>
</form>
```
在 Flask 服务器端代码中,可以通过 `request` 模块获取上传的文件,然后将其保存到服务器的指定目录中。
```python
from flask import Flask, request
import os
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
# 获取上传的文件
file = request.files['video']
# 将文件保存到指定目录中
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
return '上传成功'
if __name__ == '__main__':
app.config['UPLOAD_FOLDER'] = '/path/to/upload/folder'
app.run()
```
在上面的代码中,`UPLOAD_FOLDER` 变量指定了上传文件的保存目录。在 `upload()` 函数中,通过 `request.files` 获取上传的文件,然后使用 `save()` 方法将其保存到指定目录中。
需要注意的是,上传文件的大小可能会比较大,如果一次性将文件全部读入内存中,可能会导致服务器崩溃。因此,可以使用 Flask 自带的 `FileStorage` 模块进行分块读取文件,避免内存占用过大。下面是一个使用 `FileStorage` 模块的示例代码:
```python
@app.route('/upload', methods=['POST'])
def upload():
# 获取上传的文件
file = request.files['video']
# 将文件保存到指定目录中
with open(os.path.join(app.config['UPLOAD_FOLDER'], file.filename), 'wb') as f:
while True:
chunk = file.stream.read(1024 * 1024) # 每次读取 1MB
if not chunk:
break
f.write(chunk)
return '上传成功'
```
在上面的代码中,使用 `stream` 属性获取文件流,然后每次读取 1MB 的数据,直到文件全部读取完毕。这种方式可以避免一次性将文件全部读入内存中,从而避免服务器崩溃。