微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

res.download(filepath) 不提示在客户端下载

如何解决res.download(filepath) 不提示在客户端下载

我正在使用 node 和 react 构建图像压缩器。服务器通过 res.download(filepath) 向客户端发送图像,但在客户端不会发生。 But I get the 200 OK response in the network and the image attachment。如何在客户端自动触发下载?

这是我处理图像压缩和下载代码快速路由器:

app.get('/download/:imageName',async (req,res)=>{
let imageName = req.params.imageName
let path = 'uploads/'+imageName;

//Image compression code
const compressedImage = await imagemin([path],{
    destination: "output",plugins: [
      imageminpngquant({
        quality: [0.6,0.8]
      }),imageminMozjpeg(),imagemingifsicle({lossy: 70}),imageminSvgo({
        plugins: extendDefaultPlugins([
            {name: 'removeViewBox',active: false}
        ])
        })
    ]
  });
  // Here filepath = process.cwd()+"/"+compressedImage[0].destinationPath
  res.download(process.cwd()+"/"+compressedImage[0].destinationPath)
})

这是我的客户端函数,它发送下载图像的获取请求:

  function downloadAnImage(imageLink){
 fetch("/download/"+imageLink)
}

顺便说一下,我没有在客户端处理响应,因为下载应该发生在 得到回应。

但是如果在浏览器中输入完整的图像 URL 路径,下载就会发生。然后我想我应该将完整的图像 URL 发送到客户端,但我找不到一个获取我的服务器正在运行的主机 URL。我知道我的服务器正在运行的 URL,但是由于我要托管这个应用程序,手动将“localhost:3001”作为主机 url 是行不通的,对吗?

解决方法

我通过更改 downloadAnImage 函数解决了这个问题:

 function downloadAnImage(imageLink){
  let link=document.createElement('a');
  link.href = process.env.REACT_APP_PROXY+"/download/"+imageLink
  link.target = "_blank"
  link.download = imageLink;
  link.click();
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。