Задать вопрос
Ответы пользователя по тегу Парсинг
  • NODE.JS – парсинг контента. При скачивании изображений получаю битые файлы. Как поправить?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    const https = require('https');
    const fs = require('fs');
    const path = require('path');
    const { URL } = require('url');
    
    async function downloadFile(url, outputPath) {
        // Парсим URL для получения компонентов
        const parsedUrl = new URL(url);
        
        // Если путь для сохранения не указан, используем имя файла из URL
        if (!outputPath) {
            outputPath = path.basename(parsedUrl.pathname);
        }
    
        return new Promise((resolve, reject) => {
            const file = fs.createWriteStream(outputPath);
            
            https.get(url, (response) => {
                // Проверяем статус код ответа
                if (response.statusCode !== 200) {
                    reject(new Error(`Ошибка загрузки: ${response.statusCode}`));
                    return;
                }
    
                // Получаем общий размер файла для прогресса
                const totalSize = parseInt(response.headers['content-length'], 10);
                let downloadedSize = 0;
                
                response.pipe(file);
    
                // Опционально: отслеживание прогресса загрузки
                response.on('data', (chunk) => {
                    downloadedSize += chunk.length;
                    if (totalSize) {
                        const percent = (downloadedSize / totalSize * 100).toFixed(2);
                        console.log(`Загружено: ${percent}%`);
                    }
                });
    
                file.on('finish', () => {
                    file.close();
                    resolve({ path: outputPath, size: downloadedSize });
                });
            }).on('error', (err) => {
                fs.unlink(outputPath, () => reject(err));
            });
    
            file.on('error', (err) => {
                fs.unlink(outputPath, () => reject(err));
            });
        });
    }
    
    // Пример использования
    downloadFile('https://example.com/file.zip', './downloaded-file.zip')
        .then((result) => console.log(`Файл сохранен: ${result.path} (${result.size} байт)`))
        .catch((err) => console.error('Ошибка загрузки:', err));
    Ответ написан
    1 комментарий