You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Flask获取二进制视频文件并保存为可播放的Blob格式

问题根因

你的核心问题是Axios默认将响应内容按文本格式解析转码,导致返回的二进制视频数据被UTF-8编码损坏,才会出现Blob大小不一致、内容乱码无法播放的问题,从你贴的响应原始数据也能看出来,data字段已经被转成了带乱码的字符串,而不是原始二进制数据。

解决方案

只需要修改两处代码即可解决:

1. 修改Axios请求配置,指定响应类型为blob

在你的submitVideo方法的axios请求配置中,新增responseType: 'blob'字段,告诉Axios不要解析响应,直接返回原始Blob对象:

axios.post('http://127.0.0.1:5000/', formData, { 
  headers: {
    'Content-Type': 'multipart/form-data',
  },
  // 新增这一行
  responseType: 'blob'
}).then((response) => {

2. 简化响应处理逻辑

因为已经指定了responseType: 'blob',此时response.data本身就是正确的Blob对象,不需要你再手动封装,直接用就行:

.then((response) => {
  // 直接取response.data即可,已经是标准Blob
  state.modelVideo = response.data;
  resolve();
})

可选优化(非必须)

如果需要确保Flask返回的响应更规范,可以在Flask返回时加上Content-Length头,避免传输异常:

@app.route('/', methods=["POST","GET"])
def model():
    if request.method == "POST":
        video = request.files['webcam'].stream.read()
        return flask.Response(
            video, 
            mimetype='video/x-matroska',
            headers={'Content-Length': len(video)}
        )

内容的提问来源于stack exchange,提问作者nJoooy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:21:01