В этом руководстве мы рассмотрим, как загружать и загружать PDF-файлы в Dropbox с помощью JavaScript. Мы будем использовать библиотеку axios для выполнения HTTP-запросов, Dropbox API для взаимодействия с Dropbox и регулярные выражения для извлечения URL-адресов PDF с веб-страницы.

Предпосылки

  • Аккаунт Dropbox
  • Токен доступа к Dropbox API
  • Node.js и NPM установлены

Начиная

Сначала создайте новый проект Node.js и установите необходимые зависимости:

mkdir dropbox-pdf-download
cd dropbox-pdf-download
npm init -y
npm install axios dropbox --save

Загрузка PDF-файлов

Мы будем использовать библиотеку axios для выполнения HTTP-запросов и извлечения HTML-содержимого веб-страницы. Затем мы будем использовать регулярное выражение для извлечения URL-адресов PDF из HTML.

import axios from 'axios';

async function downloadPDFs() {
  const response = await axios.get('https://www.example.com');
  const html = response.data;
  // regex pattern to extract PDF URLs
  const pattern = /https:\/\/www\.example\.com\/files\/\S+\.pdf/g;
  const matches = html.match(pattern);
  if (!matches) {
    console.log('No PDF files found.');
    return;
  }
  // download each PDF
  for (const match of matches) {
    try {
      const response = await axios.get(match, { responseType: 'arraybuffer' });
      const filename = match.split('/').pop();
      const { size } = response.data;
      console.log(`Downloaded ${filename} (${size} bytes) from ${match}`);
    } catch (error) {
      console.error(`Error downloading ${match}:`, error);
    }
  }
}

Загрузка PDF-файлов в Dropbox

Мы будем использовать Dropbox API для взаимодействия с Dropbox и загрузки загруженных PDF-файлов.

import { Dropbox } from 'dropbox';

async function uploadPDFs() {
  // create Dropbox client
  const dbx = new Dropbox({ accessToken: '<your_access_token_here>' });
  // read PDF files from directory
  const files = await fs.promises.readdir('./pdfs');
  // upload each PDF to Dropbox
  for (const file of files) {
    try {
      const contents = await fs.promises.readFile(`./pdfs/${file}`);
      const uploadedFile = await dbx.filesUpload({
        path: `/${file}`,
        contents,
        autorename: true,
      });
      console.log(`Uploaded ${file} to Dropbox:`, uploadedFile);
    } catch (error) {
      console.error(`Error uploading ${file} to Dropbox:`, error);
    }
  }
}

Собираем все вместе

Теперь мы можем объединить функции загрузки и загрузки в один скрипт.

import axios from 'axios';
import {
    Dropbox
} from 'dropbox';

async function downloadPDFs() {
    const response = await axios.get('https://www.example.com');
    const html = response.data;
    // regex pattern to extract PDF URLs
    const pattern = /https:\/\/www\.example\.com\/files\/\S+\.pdf/g;
    const matches = html.match(pattern);
    if (!matches) {
        console.log('No PDF files found.');
        return;
    }
    // download each PDF
    for (const match of matches) {
        try {
            const response = await axios.get(match, {
                responseType: 'arraybuffer'
            });
            const filename = match.split('/').pop();
            const {
                size
            } = response
            // upload each PDF to Dropbox
            const uploadedFile = await dbx.filesUpload({
                path: `/${filename}`,
                contents: response.data,
                autorename: true,
            });

            console.log(`Uploaded ${filename} (${size} bytes) to Dropbox:`, uploadedFile);
        } catch (error) {
            console.error(`Error downloading or uploading ${match}:`, error);
        }
    }
}

downloadPDFs();

В этом разделе кода массив matches содержит все URL-адреса PDF, извлеченные с веб-сайта руководств FDA.

Для каждого URL-адреса в массиве matches функция axios.get() используется для загрузки файла PDF. Параметр responseType имеет значение 'arraybuffer', что указывает Axios возвращать данные ответа в виде ArrayBuffer, а не в виде строки. Это необходимо, поскольку файлы PDF являются двоичными файлами и не могут храниться в виде строк.

Затем переменная filename извлекается из URL-адреса PDF с использованием метода split() для разделения строки URL-адреса на каждый символ /, а затем метода pop() для извлечения последнего элемента в результирующем массиве, которым является имя файла.

Переменной size присваивается свойство size объекта response.data, которое представляет собой размер файла PDF в байтах.

Наконец, метод filesUpload() клиента Dropbox используется для загрузки файла PDF в Dropbox. Параметр path указывает место в Dropbox, куда следует загрузить файл, в данном случае это корневой каталог ('/') с переменной filename в качестве имени файла. Параметр contents указывает содержимое файла, который является response.data ArrayBuffer. Для параметра autorename установлено значение true для автоматического переименования файла, если файл с таким именем уже существует в Dropbox.

Если при загрузке или выгрузке PDF-файла возникает ошибка, на консоль выводится сообщение об ошибке.

Наконец, downloadPDFs() функция вызывается, чтобы инициировать загрузку и выгрузку файлов PDF.

Заключение

В этой статье мы продемонстрировали, как загружать и загружать PDF-файлы в Dropbox с помощью JavaScript. Мы использовали библиотеку Axios для выполнения HTTP-запросов, API Dropbox для взаимодействия с Dropbox и регулярные выражения для извлечения URL-адресов PDF с веб-страницы.

Этот метод может быть полезен для автоматизации процесса резервного копирования или совместного использования PDF-файлов. Используя JavaScript, мы можем создавать сценарии, которые можно запускать по расписанию или запускать по событию, что позволяет нам легко управлять большим количеством файлов.

Я надеюсь, что вы нашли эту статью полезной. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, не стесняйтесь оставлять их ниже.