Привет, я пытаюсь отправить файл с node.js клиенту. Мой код работает, однако, когда клиент переходит к указанному URL-адресу (/helloworld/hello.js/test), он передает этот файл. Доступ к нему из google chrome делает файл (.mp3) воспроизведением в проигрывателе.Node.js отправить файл клиенту
Моя цель состоит в том, чтобы браузер пользователя загрузил файл и попросил клиента, где он хочет его сохранить, а не передавать его на веб-сайт.
http.createServer(function (req, res) {
switch(req.url) {
case '/helloworld/hello.js/test':
var filePath = path.join(__dirname, '/files/output.mp3');
var stat = fileSystem.statSync(filePath);
res.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': stat.size
});
var readStream = fileSystem.createReadStream(filePath);
// We replaced all the event handlers with a simple call to readStream.pipe()
readStream.on('open', function() {
// This just pipes the read stream to the response object (which goes to the client)
readStream.pipe(res);
});
readStream.on('error', function(err) {
res.end(err);
});
Спасибо, что это сработало, но теперь он загружает только 4 МБ файла, весь файл размером около 6 Мб. –
Вы проверили содержимое файла? Все внутри? –
Очень плохо пользователь 'readFileSync' в обработчике запросов, так как Node.js является однопоточным. Поэтому, если у вас есть два запроса на этот URL-адрес, второй будет ждать, пока первый не завершит его работу. На локальном хосте вы можете не заметить, что что-то не так, но на производственном сервере с 1000 запросами в секунду будут задержки. Используйте ['readFile'] (http://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback) с обратным вызовом вместо – Curious