使用Express显示图像,而不是下载

lh80um4z  于 2022-10-06  发布在  Nginx
关注(0)|答案(3)|浏览(190)

我正在工作的simple server可以提供图像服务。当直接浏览图片URL时,Chrome会提供下载图片,而不是直接在浏览器中显示。为什么会这样呢?大概是标题里的什么东西吧?

相关代码如下:

tilestore.getTile(req.param("z"), req.param("x"), req.param("y"), function(err, tile) {

      if (!err) {
        res.send(tile);
      } else {
        res.send("Tile rendering error: " + err + "n");
      }

    });

我需要在标题中添加一些东西吗?目前的情况如下:

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 01 Sep 2014 07:22:30 GMT
Content-Type: application/octet-stream
Content-Length: 37779
Connection: keep-alive
X-Powered-By: Express
ETag: W/"9393-1937584155"
4si2a6ki

4si2a6ki1#

好的,这很简单。只需设置content-type

if (!err) {
    res.contentType('image/png');
    res.send(tile);
  } else {
    res.send("Tile rendering error: " + err + "n");
  }

这些图像始终是.png

新标头:

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 01 Sep 2014 07:33:22 GMT
Content-Type: image/png
Content-Length: 37779
Connection: keep-alive
X-Powered-By: Express
ETag: W/"9393-1937584155"
zwghvu4y

zwghvu4y2#

刚刚遇到了同样的问题,并发现仅修改内容类型是不够的。This answer试图做相反的事情,提供了解决方案。我还需要添加一个content-disposition头文件:res.set("Content-Disposition", "inline;");,并设置正确的内容类型,这允许我显示我的图像而不是下载。

voj3qocg

voj3qocg3#

我在处理svg图像文件时也遇到了同样的问题,结果我不得不更改

'content-type': 'image/svg'

'content-type': 'image/svg+xml'

相关问题