Update: Я более или менее решить эту проблему с помощью многочастному (app.use(multipart({uploadDir: __dirname + '/../uploads'}))
из these instructions), но до сих пор не знаю, почему мой исходный код (ниже) не выполняется.Использование узла Buffer или FileStream с FormData файл загрузить
В этом вопросе было множество вариантов, и я пробовал идеи там без успеха. Я использую file uploading directive (и с тех пор пытаюсь использовать другую альтернативу с открытым исходным кодом) для отправки двоичного файла на сервер узла, который запускает следующий код (на основе ответа SO, который я не могу сейчас переделать):
exports.receive = function(req, res) {
var fitFileBuffer = new Buffer('');
// req.setEncoding("binary"); //doesn't help
req.on('data', function(chunk) {
fitFileBuffer = Buffer.concat([fitFileBuffer, chunk]);
});
req.on('end', function() {
fs.writeFileSync(
"today2.fit",
fitFileBuffer,
'binary');
res.send(200);
});
};
Если я загружаю today.fit
и сравниваю с today2.fit
, они имеют один и тот же Кбайт данных, но не идентичны, а последующий код не обрабатывает файл. Учитывая, что это происходит с двумя частями стороннего кода, я подозреваю, что проблема связана с моим кодом.
Вот детали от клиентской части POST делается
Мне нужно было изменить это на 'req.pipe (fileWriteStream)', чтобы избежать ошибки во время выполнения, но я закончил с тем, что выглядит таким же «today2.fit», как и с моим исходным кодом. Когда я использовал отладчик узла, я обнаружил, что '' end'', похоже, не вызывался, хотя это и работало с моим исходным кодом. Есть еще идеи? –
Спасибо, я имел это как 'ws' и пропустил этот, когда я реорганизовал. re: «конец», не стреляющий, ахх, один, я всегда забываю об этом. Исправленные потоки не испускают «конец», они испускают «финиш». Я обновил код. – generalhenry
Спасибо, но это все еще не делает это для меня. См. Обновление в вопросе, поскольку я нашел решение, но основанное на добавлении промежуточного программного обеспечения unipart. Я все еще смущен –