@Coder321

Как продолжить скачивание после падения?

Есть два сервера. Один качает с большой файл, гб так на 10-15. Допустив качающий сервер упал. Можно ли как то возобновить закачку после перезапуска с точки остановки если То есть, если на момент падения качающий сервер скачал 5гб, то не качать их заново, а просто продолжить закачку. На данный момент, файл отдается так (скороченый вариант):
(req, res)=>{
const stream = fs.createReadStream(url);
stream.pipe(res);
}

Может кто то, что то посоветовать?

Не очень красивый вариант решения я нашел, может кто подскажет как его усовершенствовать
const url = `http://localhost:3589/file/download?fileName=music.7z&startFrom=${fileStat.size}`;
    const readStream = createReadStream('./file.7z')
    const writeStream = createWriteStream(`${Date.now()}.7z`);
    readStream.on('data', (data) => {
        writeStream.write(data)
    })
    readStream.on('close', (data) => {
        const req = request.get(url)
        req.on('data', (data) => {
            writeStream.write(data)
        })
        req.on('close', (data) => {
            write.close()
        })
    })
  • Вопрос задан
  • 1365 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MadridianFox
Web-программист, многостаночник
Сделать такую докачку можно на любом языке, т.к. всё что нужно - это добавлять в запрос заголовки и определять размер файла в байтах.

Докачка файла - это свойство протокола http. Если http-сервер поддерживает докачку, то он отдаёт заголовок Accept-ranges. Скачивая файл вы можете прервать загрузку, а когда решите докачать - отправить запрос на скачивание этого же файла, но уже с заголовокм Range: bytes=<count_loaded_bytes>-, тогда сервер начнёт отдавать файл с указанного места. Погуглите подробнее про эти заголовки.

Это касается уже готовых http-серверов, которые полностью соответствуют стандарту. В вашем случае, наверное, необходимо отдающий сервер научить отдавать файл по стандарту. Т.е. если поступил запрос на скачивание файла, надо учитывать, что в заголовке может быть передано смещение, ну и отдавать файл начиная с этого смещения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы