2013-09-08 2 views
0

У меня есть веб-сервер с узлами node.js и express. Когда я подаю текстовый файл, большой, для загрузки в браузер требуется много времени. Представьте себе, что текстовый файл объемом 34 Мб будет передан клиенту, он должен будет загрузить только 34 МБ, чтобы проверить что-то в файле журнала.Node.js & Express: Обслуживание текстовых файлов по частям

Есть ли что-то, что я мог бы сделать по этому поводу? Служить это по частям возможно? Например: Часть 1/10 - Часть 10/10

+0

Это может быть стоит рассмотреть (если жизнеспособный) способы либо анализирующие вытесните такой файловый сервер и только вытащите соответствующий контент или сохраните его в какой-то базе данных (разбор), которая позволит вам хранить его за пределами памяти, но упростить запрос. – max

+0

Вы посмотрели на socket.io или ajax? Вы можете загрузить больше данных, когда пользователь прокручивает страницу вниз. Если это то, что вы ищете, я могу привести примеры и сайты. –

ответ

0

Вы просмотрели Node streams? Вы можете использовать их для отправки своих данных небольшими кусками и предлагать обратную связь, чтобы показать, сколько из них было загружено.

+0

Мое единственное беспокойство в этом - это чувство, что «ему нужно будет скачать 34 МБ, чтобы проверить что-то в файле журнала». Не зная точно, в чем проблема, все равно стоит найти лучший способ фильтрации данных перед отправкой его клиенту. Используя что-то вроде [hyperquest] (https://github.com/substack/hyperquest) (через Browserify) с потоками, определенно хорошая идея, но, возможно, не самая значительная точка боли. – max

1

Для частичного части файла вы можете взять диапазон байтов и прочитать этот диапазон с помощью функции файловой системы fs.createReadStream(). Например, если вы хотите одну десятую файла, вы можете измерить его размер и рассчитать диапазон байтов.

app.get('/log', function(req, res) { 
    fs.stat('log.txt', function(err, stats) { 
    var end = Math.ceil(stats.size/10); 
    var stream = fs.createReadStream('log.txt', {start: 0, end: end}); 

    var log = new String(); 
    readable.on('data', function(chunk) { 
     log += chunk; 
    }); 

    readable.on('end', function() { 
     res.send(log); 
    }); 
    }); 
}); 

Вы всегда можете изменить код для отправки сообщений с 10-20%, или отправить последние 10% файла и т.д.