发送图像文件响应 - node.js

时间:2013-12-14 19:52:55

标签: image node.js sockets webserver

我需要仅使用net module和socket.write命令来实现Web服务器。 我正在使用以下代码发送文本文件(html,css等):

fs.readFile(file,encoding='UTF8', function (err, data) {
if (err) throw err;
var dataToReturn=data.toString();
socket.write('Content-Length:'+dataToReturn.length+'\r\n');
socket.write('\r\n');
socket.write(dataToReturn);
});

它的工作正常,但是当我需要发送图像文件时它不起作用。 我该怎么办?

2 个答案:

答案 0 :(得分:3)

通过将编码设置为utf8,您已明确告知Node将文件转换为文本字符串,但它是二进制图像,因此转换过程可能会破坏某些数据并使您拥有长度不正确。将数据保留为缓冲区,如下所示:

fs.readFile(file, function (err, data) {
    if (err) throw err;
    socket.write('Content-Length: ' + data.length + '\r\n');
    socket.write('\r\n');
    socket.write(data);
});

答案 1 :(得分:1)

fs.readFile(file, function (err, data) {
  if (err) throw err;
  //Content-Length should be binary length not string length
  socket.write('Content-Length:'+data.length+'\r\n');

  socket.write('\r\n');
  socket.write(data);
});

您可能需要内容类型才能使您的回复更有效:)

socket.write('Content-Type:'+ mimetype +'\ r \ n');