reactjs 为什么我下载的视频文件大小是0字节通过使用获取方法

guykilcj  于 2023-06-05  发布在  React
关注(0)|答案(1)|浏览(611)

我试图从一个网站使用其URL获取视频。为了实现这一点,我写了一些JavaScript代码。但是,当我运行代码时,下载的文件大小为0字节。
我确信URL是正确的,因为我在Chrome中输入了相同的URL。我可以看到视频并成功下载。
在该网站上:html在下面

<video controls autoplay name="media">
  
  <source src="https://rexample" type="video/mp4">

</video>

下面是我的代码:

async function downloadVideo(link) {
      try {
      
        const response = await fetch(link,{
          mode: 'no-cors',
          method: 'GET',
          headers: {
            'Content-Type': 'video/mp4',
        }});

      
        const blob = await response.blob();
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'video.mp4';
        a.click();
        URL.revokeObjectURL(url);
      } catch (error) {
        console.error(error);
      }
    }
91zkwejq

91zkwejq1#

您的代码看起来基本上没问题,但您可以进行一些修改以确保它正确工作。
一、模式:fetch函数中的“no-cors”选项阻止了响应的访问,这可能是0字节文件的原因。相反,您应该删除mode选项或使用mode:'cors'允许跨域请求。
其次,您在请求中设置的Content-Type头是不必要的。服务器应该已经在响应中发送了正确的Content-Type标头,因此您可以完全删除headers对象。

async function downloadVideo(link) {
 try {
  const response = await fetch(link);
  const blob = await response.blob();
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'video.mp4';
  a.click();
  URL.revokeObjectURL(url);
 } catch (error) {
  console.error(error);
 }
}

相关问题