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'});
您只能将一个值写入给定的标题,因此第二个标题将覆盖第一个标题。 两种解决方案是
上一篇: Nodejs: How return different content types with same response (text and image)?