2013-12-14 3 views
2

Мне нужно реализовать веб-сервер, используя только команды net module и socket.write. Я использую следующий код для отправки текстовых файлов (HTML, CSS и т.д.):Отправка ответа файла изображения - node.js

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); 
}); 

Its работает нормально, но это не работает, когда мне нужно отправить файлы изображений. Что мне делать?

ответ

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
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');

Смежные вопросы