无法使用node.js和express来提供图像(png)

时间:2014-01-31 20:39:49

标签: node.js

我在SO上研究了类似的问题,但是没有找到解决我问题的方法......我已经建立了一条快速路线来提供图像,但是我无法让它从存储的地方返回图像。请注意,我已经包含了一个声明,允许来自任何来源的请求。会发生的情况是,当我向http://localhost:8080/images/x10.png发出请求时,我得到的回复是一个空的图片元素src="http://localhost:8080/images/x10.png而不是http://ubuntubox.dev/images/x10.png,这是图片实际所在的位置,是路径我最终传递给请求方法。我错过了什么?感谢。

app.get('/images/*', function(req, res, path){
  var imagePath = req.url,
      url = 'http://ubuntubox.dev' + imagePath;

  request(url, function(error, response, img) {
    if(!error && response.statusCode === 200) {
      res.header('Access-Control-Allow-Origin', '*');
      res.writeHead(200, {'Content-Type': 'image/png' });
      res.end(img, 'binary');
    } else if(response.statusCode === 404) {
      res.status(404);
      res.type('txt').send('oops');
    }
  });
}).listen(8080, '127.0.0.1');

5 个答案:

答案 0 :(得分:6)

我不知道你是否还有这个问题,但是......

您的问题的解决方案只是放一个.pipe(res),它会将文件发送到响应

app.get('/images/*', function(req, res, path){
  var imagePath = req.url,
      url = 'http://ubuntubox.dev' + imagePath;

  request(url).pipe(res);
}).listen(8080, '127.0.0.1');

答案 1 :(得分:1)

user2879041已经回答了他认为有用的东西,我仍然会想到另一种提供图像的方式,(我不会手动为每个文件写一个路径并将文件发送到浏览器)。 / p>

由于您已经使用快递,只是直接服务器静态图像,您已经在express.static

中得到了它
app.use(express.static('/Absolute/path/to/the/file/images/img1.png'));
使用express.static的

好处是你只需要在想要静态的文件夹中添加图像,express就会为你提供图像(无需添加任何代码)。

答案 2 :(得分:1)

如果您希望以有意义的方式提供图片和其他资源,并且不需要您编写一百万条路线,请尝试以下操作:

  1. 创建一个新文件夹" public"并将所有资产转移到其中。
  2. 打开server.js并添加以下行:
  3. app.use(express.static('public'))

    您的资产现在应该可以这样提供:

    http://localhost:3000/images/kitten.jpg
    http://localhost:3000/css/style.css
    http://localhost:3000/js/app.js
    http://localhost:3000/images/bg.png
    http://localhost:3000/hello.html
    

    Soure:https://expressjs.com/en/starter/static-files.html

答案 3 :(得分:0)

在快递4中为自己想出了这个。

app.get('/images/img1.png', function(req, res){
  res.sendFile('/Absolute/path/to/the/file/images/img1.png');
});

答案 4 :(得分:0)

我不确定情况是否相同。

但这是我的答案:

var path = require('path');
var express = require('express');
var app = express();

var dir = path.join(__dirname, 'public');

app.use('/public', express.static(dir));

app.listen(3000, function () {
    console.log('Listening on http://localhost:3000/');
});

注意此行:

app.use('/ public',express.static(dir));

您需要使用app.use方法再次添加路径 我不知道添加这部分的想法,但这是使其起作用的唯一方法。 并且没有它继续响应“错误”,我无法访问此文件。

希望我能为您提供帮助。