如何在reactjs中下载图像?

DDD*_*DDD 1 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>
Run Code Online (Sandbox Code Playgroud)

Iba*_*ikh 18

安装文件保护程序包:

npm i file-saver
Run Code Online (Sandbox Code Playgroud)

你的 React 组件:

  import { saveAs } from 'file-saver'

  const Index = () => {
    const downloadImage = () => {
      saveAs('image_url', 'image.jpg') // Put your image URL here.
    }

    return <Button onClick={downloadImage}>Download!</Button>
  }
Run Code Online (Sandbox Code Playgroud)

  • 这会在 Firefox 的新选项卡中打开图像,但不会下载它。 (2认同)

ala*_*nah 10

遇到这个试图弄清楚如何下载 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>
  );
}
Run Code Online (Sandbox Code Playgroud)

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

PS 下载方法取自此回复,但使用了plain fetch 而不是axios。 /sf/answers/3515438251/


Shu*_*rma 8

你可以这样做:

function App() {
  const download = () => {
    var element = document.createElement("a");
    var file = new Blob(
      [
        "https://timesofindia.indiatimes.com/thumb/msid-70238371,imgsize-89579,width-400,resizemode-4/70238371.jpg"
      ],
      { type: "image/*" }
    );
    element.href = URL.createObjectURL(file);
    element.download = "image.jpg";
    element.click();
  };
  return (
    <div className="App">
      <a
        href="https://timesofindia.indiatimes.com/thumb/msid-70238371,imgsize-89579,width-400,resizemode-4/70238371.jpg"
        download
        onClick={() => download()}
      >
        <i className="fa fa-download" />
        download
      </a>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

这是一个工作网址:https://codesandbox.io/s/clever-noether-3nu2p ?fontsize=14

注意:可以做更多的事情。我刚刚创建这个是为了演示目的。

  • 已下载但图像无法打开 (11认同)
  • 它不再工作了..还检查了您提供的链接 (2认同)