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

React中如何利用Axios请求返回的MP4视频数据展示视频?

在React中展示Axios获取的MP4视频二进制数据

要把Axios返回的MP4二进制数据在页面上展示,核心是把二进制数据转换成浏览器能识别的视频资源地址,具体步骤如下:

1. 修改Axios请求,指定正确的响应类型

默认情况下Axios会把响应解析为JSON,这会导致MP4二进制数据损坏。你需要在请求里设置responseType: 'blob',让Axios以Blob对象返回视频数据:

const onGetVideo = () => {
  axiosClient.get(`/solution/video.mp4`, {
    responseType: 'blob' // 关键配置,确保返回Blob类型数据
  })
  .then(({ data }) => {
    handleVideoBlob(data);
  })
  .catch(err => {
    console.log(err)
  })
}

2. 生成视频可访问的临时URL

用浏览器提供的URL.createObjectURL()方法,把Blob对象转换成一个临时的本地URL,这个URL可以直接赋值给video标签的src属性:

const handleVideoBlob = (blob) => {
  const videoUrl = URL.createObjectURL(blob);
  // 把videoUrl存入组件状态,用于渲染video标签
  setVideoUrl(videoUrl);
}

3. 渲染视频并管理资源生命周期

在React组件中,用useState存储视频URL,然后渲染<video>标签。另外要注意,组件卸载时必须调用URL.revokeObjectURL()释放临时URL,避免内存泄漏:

import { useState, useEffect } from 'react';

const VideoPlayer = () => {
  const [videoUrl, setVideoUrl] = useState(null);

  const axiosClient = axios.create({ /* 你的Axios配置 */ });

  const onGetVideo = () => {
    axiosClient.get(`/solution/video.mp4`, { responseType: 'blob' })
      .then(({ data }) => {
        const url = URL.createObjectURL(data);
        setVideoUrl(url);
      })
      .catch(err => console.log(err));
  };

  // 组件卸载时清理临时URL
  useEffect(() => {
    return () => {
      if (videoUrl) {
        URL.revokeObjectURL(videoUrl);
      }
    };
  }, [videoUrl]);

  return (
    <div>
      <button onClick={onGetVideo}>加载视频</button>
      {videoUrl && (
        <video controls width="600">
          <source src={videoUrl} type="video/mp4" />
          你的浏览器不支持视频播放
        </video>
      )}
    </div>
  );
};

export default VideoPlayer;

关键说明

  • responseType: 'blob'是核心,确保Axios正确处理二进制视频数据
  • URL.createObjectURL()生成的是浏览器内部临时URL,仅在当前会话有效,不需要服务器额外支持
  • 必须在组件卸载时释放URL,否则会造成内存占用过高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:09:57