我需要仅使用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);
});
它的工作正常,但是当我需要发送图像文件时它不起作用。 我该怎么办?
答案 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');