如何在reactjs中下载图像?

新手上路,请多包涵

我想尝试下载图片点击按钮,但是当我点击按钮时,不是下载图片而是直接打开图片,但我想下载图片,那么如何在 reactjs 中下载图片?

 <a
  href="https://timesofindia.indiatimes.com/thumb/msid-70238371,imgsize-89579,width-400,resizemode-4/70238371.jpg"
  download
 >
   <i className="fa fa-download" />
 </a>

原文由 Dharmesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

遇到这个 SO 试图弄清楚如何下载 png 图像,发现另一个答案对我来说不太适合,因为下载的文件无法打开。需要使用 arraybuffer 来转换图像。

这是有效的代码。

 function App() {
  const download = e => {
    console.log(e.target.href);
    fetch(e.target.href, {
      method: "GET",
      headers: {}
    })
      .then(response => {
        response.arrayBuffer().then(function(buffer) {
          const url = window.URL.createObjectURL(new Blob([buffer]));
          const link = document.createElement("a");
          link.href = url;
          link.setAttribute("download", "image.png"); //or any other extension
          document.body.appendChild(link);
          link.click();
        });
      })
      .catch(err => {
        console.log(err);
      });
  };
  return (
    <div className="App">
      <a
        href="https://upload.wikimedia.org/wikipedia/en/6/6b/Hello_Web_Series_%28Wordmark%29_Logo.png"
        download
        onClick={e => download(e)}
      >
        <i className="fa fa-download" />
        download
      </a>
    </div>
  );
}

代码沙盒: https ://codesandbox.io/s/dreamy-gould-h1l72

PS 下载方法取自这个回复,但使用的是 plain fetch 而不是 axios。 https://stackoverflow.com/a/50220546/10006323

原文由 alanmynah 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进