2016-08-16 1 views
0

Я новичок в NodeJS и пробую разные вещи.NodeJS - подавать файл с дроссельной скоростью

То, что я был в состоянии сделать, это загрузить файл Собирается используя следующий код:

app.get('/download', function(req, res){ 


    var file = 'public/songs/myfile.mp3'; 

    var filename = path.basename(file); 
    var mimetype = mime.lookup(file); 

    res.setHeader('Content-disposition', 'attachment; filename=' + filename); 
    res.setHeader('Content-type', mimetype); 
    res.setHeader('Content-Length', file.length); 

    var filestream = fs.createReadStream(file); 

    filestream.pipe(res); 
}); 

Это хорошо работает, что теперь я пытаюсь для того чтобы достигнуть это увидеть, если это возможно, чтобы задушить скорость загрузки , Например, если кто-то пытается загрузить файл, он будет загружаться с максимальной скоростью 1 Мбит/с (например).

Я пытался использовать этот код: https://gist.github.com/4poc/1454516

Когда я загрузить страницу, кажется, чтобы загрузить indefinetly, но я думаю, что проблема

filestream.pipe(limitStream); 

Так что никакого ответа не дается.

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

ответ

1

В req и res объекты потоки, так что вы можете трубы на ответ:

var filestream = fs.createReadStream(file); 

filestream.pipe(limitStream).pipe(res); 

FWIW: каждый раз, когда вы звоните pipe() вы получаете назад новый поток. Выше такой же, как это:

var filestream = fs.createReadStream(file); 

var throttleStream = filestream.pipe(limitStream); 

throttleStream.pipe(res); 

Это важно понять, потому что это заманчиво, чтобы сделать это, но он не будет делать то, что вы ожидаете:

var filestream = fs.createReadStream(file); 

filestream.pipe(limitStream); 

filestream.pipe(res); 
+0

Я попытался «FileStream. труба (limitStream) .pipe (RES);» что имело смысл для меня. Но, к сожалению, я получаю пустой файл сразу после загрузки страницы. В том же время я вижу NodeJs журнал информации печати, как: «испускает паузу, возобновится в: 8.13333333333344ms выделяющих резюме испускает данные испускают паузу, возобновится в: 1.3333333333332575ms испускают конец испускают резюме» , который является скриптом, работающим –

+0

Хмм, что-то не кажется правильным. Если вы просто выполняете 'filestream.pipe (res);' - вы получаете ответ файла, как вы ожидаете (не дросселируется)? –

+0

Редактировать: нет, вы правы, я, должно быть, что-то испортил ... Ответ позже: –