2016-06-18 3 views
2

Я пишу сервер node.js, а для части сайта пользователь должен иметь возможность загружать изображение. Когда изображение загружается, копия на сервере повреждена.Node.js записывать данные необработанного изображения

Вот сценарий для синтаксического анализатора тела.

request.body = {}; 
var busboy = new Busboy({headers: request.headers}); 
busboy.on("field", function(fieldname, val) { 
    request.body[fieldname] = val; 
}); 
busboy.on("file", function(fieldname, file, filename) { 
    var fileContents = ""; 
    file.on("data", function(data) { 
    fileContents += data; 
    }); 
    file.on("end", function() { 
    request.body[fieldname] = {"filename": filename, "contents": fileContents}; 
    }); 
}); 
busboy.on("finish", function() { 
    next(request, response); 
}); 
request.pipe(busboy); 

Когда текстовый файл загружен, сервер сохраняет его просто отлично, но некоторые символы в файлах изображений не отправлено или получено правильно.

+1

Написать файл в ANSI? Какие? Файл изображения - это двоичные данные, которые на самом деле не зависят от вашего выбора кодировки. Что побуждает вас идентифицировать это как проблему? Вы смотрели на «поврежденный» файл, проверяли, содержат ли он заголовки HTTP или некоторые данные мусора? –

+0

Без какого-либо кода трудно сказать, что происходит. – robertklep

+0

Ну, файл, который я загружаю, имеет символы типа ‰, но когда node.js записывает их в файл, они становятся . Так есть ли другой способ сохранить символы при записи файла? –

ответ

1

Это потому, что данные являются буфером и по умолчанию, когда вы рассматриваете его как строку (добавив ее в другую строку), кодировка UTF8. Решение - это не рассматривать его как строку, рассматривать ее как буфер, тогда вы не получите неправильных кодовых точек. - Patrick Roberts

Как сказал Патрик, проблема была в fileContents += data;. Это преобразует буфер data в строку, которая не может содержать символы, которые мне нужны. Вместо этого я добавил каждый буфер данных в массив, а затем объединил их и написал в файл.

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