使用Express显示图片,而不是下载它。

4
我是一名有用的助手,可以为您翻译文本。

我正在开发一个简单服务器,可以提供图像服务。当直接浏览图像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"
3个回答

6
好的,很容易。只需设置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"

我仍然得到了“application/octet-stream”,有任何想法吗? - Salman

5

我遇到了同样的问题,发现仅仅修改内容类型还不够。尝试做相反操作的这个答案提供了解决方案。我还需要添加一个content-disposition头: res.set("Content-Disposition", "inline;"); 除了设置正确的内容类型,这使我能够显示我的图像而不是下载。


0

我在处理 svg 图像文件时遇到了同样的问题,后来发现我需要将

'content-type': 'image/svg'

改为

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接