Nodejs:如何使用相同的响应(文本和图像)返回不同的内容类型?

我试图学习nodejs,我认为最好的方法是尝试做一些不使用express或任何其他非核心模块的东西。 我一直试图让一些文本和图像同时传送。 我正在尝试的代码是:

var http = require('http');
var fs = require('fs');

var server = http.createServer(function(request,response) {

    fs.readFile('my_pic.jpg', function(error, file) {
        response.writeHead(200, {'content-type':'text/html'});
        response.write('<p>hi there!</p>');

        response.writeHead(200, {'content-type':'image/jpg'});
        response.write(file, 'image');

        response.end();
    });

});

var port = process.env.PORT || 8080;

server.listen(port, function() {
    console.log('Listening on port ' + port);
});

所以最理想的是应该交付的是:

<html>
<body>
<p>hi there</p>
<img src='my_pic.jpg'/>
</body>
</html>

但是,没有任何东西出现。

我试着在写好'hi there'后显示文本,然后尝试交换显示图片的文本和图片(包含标题)的位置,但我无法确定了解如何让两者同时显示,就像在真实的网页上一样。

你能否解释一下如何将不同类型的内容放入同一个网页 - 他们是否需要采取不同的回应? 我遇到另一个问题:

nodejs - 如何读取和输出jpg图像?

像这样的东西看起来像解决方案,但我不知道如何将其应用于我的情况(我在服务器方面没有太多经验)。

非常感谢

编辑:得到它从user568109的回复工作:

var http = require('http');
var fs = require('fs');


var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, file) {

    var imagedata = new Buffer(file).toString('base64');

    response.writeHead(200, {'content-type':'text/html'});
    response.write("hi there!<img src='data:my_pic.jpg;base64,"+imagedata+"'/>");
    response.end();

    });

});

var port = process.env.PORT || 8080;

server.listen(port, function() {
    console.log('Listening on port' + port);
});

这看起来像嵌入图像很多工作 - 如果我想放入多个图像,我不得不继续嵌套这些文件流回调?

我也试过这种方式,但它不起作用:

var http = require('http');
var fs = require('fs');

var server = http.createServer(function(request,response) {

    response.writeHead(200, {'content-type':'text/html'});
    response.write("hi there!<img src='my_pic.jpg'/>");
    response.end();

});

var port = process.env.PORT || 8080;

server.listen(port, function() {
    console.log('Listening on port' + port);
});

我不确定这是否是人们的意思

response.write('<img src="my_pic.jpg"/>')

,因为服务器似乎没有以我的名义再次请求获取图像? 它只是显示一个破碎的图标图像。


如果你做了response.write('<img src="my_pic.jpg"/>'); 如上所述,只有当浏览器发送GET图像时才会发送图像文件。 这将成为多部分的要求。

或者你可以这样做。 可以用HTML格式以二进制形式发送图像。 使用 :

<img src="data:image/gif;base64,imagedata">

imagedata是gif图像的base64编码。 所以在node.js中做到这一点:

//Write text in response.
content = get-image-file-contents;     //store image into content
imagedata = new Buffer(content).toString('base64');    //encode to base64
response.write('<img src="data:image/gif;base64,'+imagedata+'">');//send image
response.end();

在这里检查正确的图像转换NodeJS base64图像编码/解码不太正常

这会发送一个发送文本和图像的响应。 响应response.writeHead(200, {'content-type':'text/html'});只需要一个头部response.writeHead(200, {'content-type':'text/html'});


您只能将一个值写入给定的标题,因此第二个标题将覆盖第一个标题。 两种解决方案是

  • 在html中向图像写出一个url - 对于用户来说会稍微慢一些(需要额外的http请求来获取图像),但根据用例,这通常是可以接受的,并且很容易实现
  • 将图像转换为data-uri字符串并将其包含在html中作为图像的来源。 实施比第一种方法更复杂(我不知道有任何库在节点中进行转换)并且可以忽略不计。
  • 链接地址: http://www.djcxy.com/p/69301.html

    上一篇: Nodejs: How return different content types with same response (text and image)?

    下一篇: phpMyAdmin access denied error