Загрузите файлы своего проекта, которые могут быть загружены с той же позиции в случае возникновения ошибки или обновления страницы. Файл возобновляется с того же места, где он был прерван.

Иногда компоненты для загрузки файлов создать довольно сложно.

Вам нужно писать код на JavaScript. Кроме того, вам необходимо создать сервер и протестировать его несколько раз, прежде чем вы сможете развернуть его в своем приложении.

В этом уроке мы узнаем, как сделать и то, и другое.

Вы можете найти ссылку на полный код в конце этой статьи.

Предпосылка

Требуются базовые знания Angular и Node.

Настройка среды

Сначала мы создадим простой экспресс-сервер node.js.

Затем мы создадим приложение Angular и построим красивый пользовательский интерфейс, используя библиотеку компонентов пользовательского интерфейса Angular Material.

Окончательный результат будет выглядеть так:

Давайте погрузимся в код !!!

Создание экспресс-сервера

Мы будем создавать простой сервер node.js, используя экспресс, который позволяет загружать файлы.

Настройка нового проекта

Создайте новый каталог и инициализируйте новый проект, используя следующую команду. Он запросит некоторую информацию, вы можете заполнить детали или просто нажать Enter.

npm init

Создайте в своем каталоге файл с именем - - - - «app.js».

Установка внешних зависимостей

Нам нужно установить 3 внешние зависимости, а именно: express, body-parser, CORS.

Express - это среда веб-приложений для Node.js, предназначенная для создания веб-приложений и API. Установите экспресс, используя следующую команду.

npm install express --save

Совместное использование ресурсов между разными источниками - это механизм, который поможет нам получить доступ к API из приложения Angular. Установите CORS, используя следующую команду.

npm install cors --save

body - parser извлекает всю основную часть входящего потока запроса и выставляет его на req.body. Установите body-parser, используя следующую команду.

npm install body-parser

Настройка базового экспресс-сервера, включение CORS и добавление файловых систем, которые позволяют нам взаимодействовать с файловой системой. Файл app.js будет выглядеть так:

Понимание функциональности

Пользователь выберет файл, и как только он нажмет кнопку загрузки во внешнем интерфейсе, на сервер будет отправлен запрос с вопросом, существует ли файл в внутреннем каталоге или нет. Тогда у нас могут быть разные сценарии:

Случай 1. Файл существует с таким же размером: если размер существующего файла такой же, как размер загружаемого файла. Появится всплывающее сообщение «Файл уже существует».

Случай 2. Файл существует с другим размером: Если существующий файл имеет другой размер, сравните с размером загружаемого файла. Он начнет загрузку файла с той же позиции, в которую он был загружен. (Например: если размер файла составляет 1000 МБ, а файл 500 МБ уже загружен, он будет начинаться с 501 МБ).

Вариант 3 - файл не существует: загрузка файла начнется с самого начала.

Получение статуса файла

Как только мы получим запрос от внешнего интерфейса, он проверит 3 параметра для файла, то есть fileID, name и fileSize, которые будут полезны для получения информации о файле.

Мы проверим, существует ли файл или нет, используя fs.statSync в бэкэнд-папке «assets». Здесь я использовал папку «assets», но вы можете использовать любую папку по вашему выбору. Но убедитесь, что имя папки и имя в коде должны совпадать.

Затем он отправит ответ о деталях файла обратно в интерфейс.

Загрузка файла на сервер

Мы создадим объект загрузки, который будет извлекать файл в нескольких частях и сохранять файл в виде объекта.

Затем мы сохраним данные файла и инициализируем 4 разные переменные и получим их значения, используя заголовки, т.е.

  1. startByte: до фактического размера уже загруженного файла, если 0, то начать загрузку с начала.
  2. fileSize: чтобы узнать размер файла.
  3. name: узнать имя файла.
  4. fileId: для присвоения уникального идентификатора каждому файлу.

Затем мы напишем разные условия в зависимости от статуса файла загруженных данных.

Полный файл app.js:

Создание нового проекта загрузки возобновляемого файла Angular

Мы создали API, теперь мы можем приступить к созданию пользовательского интерфейса проекта (front-end).

Для этого создадим новый угловой проект. В этом проекте мы будем использовать angular-cli. Откройте командную строку (cmd) и перейдите к желаемому локации. Введите следующую команду в cmd.

ng new resumable-file-upload

Внешние зависимости

Включите библиотеку компонентов пользовательского интерфейса Angular Material в свой проект Angular для красивого пользовательского интерфейса. Он попросит ввести некоторые данные пользователя, но вы можете просто нажать Enter.

ng add @angular/material

Файл app.module.ts

Импортируйте различные модули, а именно

  1. HttpClientModule: полезно для отправки HTTP-запроса на сервер и получения ответа.
  2. FormsModule и ReactiveFormsModule: полезны для обработки данных формы.
  3. Модуль материала: модуль библиотеки компонентов пользовательского интерфейса Angular Material, полезный для создания красивого пользовательского интерфейса.

app.component.html Файл

Здесь мы напишем наш html-код, используя разные модули Angular Material, и инициализируем ввод с типом файла. Также добавьте счетчик коврика, который показывает красивую анимацию при начале загрузки файла.

Файл app.component.scss

Добавление базового стиля в проект

Файл app.component.ts

Теперь мы подключим наше интерфейсное приложение к серверным службам по протоколу HTTP. Мы будем импортировать различные модули из http, например:

HttpClient полезен для выполнения запросов Http. Каждый метод запроса имеет несколько сигнатур, и тип возвращаемого значения зависит от вызываемой сигнатуры (в основном это значения наблюдаемых и responseType).

HttpHeaders представляет параметры конфигурации заголовка для HTTP-запроса. Экземпляры неизменяемы.

HttpRequest представляет собой исходящий запрос, включая URL-адрес, метод, заголовки, тело и другие параметры конфигурации запроса.

HttpEventType - это перечисление типов для различных типов HttpEvents, таких как загрузка, загрузка, ответ и т. Д.

Теперь мы инициализируем переменные, полезные для получения пользователем сведений о загружаемом файле, такие как selectedFile, name, uploadPercent.

Затем мы создадим функцию с именем onFileSelect (), которая будет запускать событие, как только файл будет выбран пользователем, и отправит имя файла обратно в DOM.

Функция resumableUpload () будет отвечать за подключение интерфейса к серверу при получении ответов. Сначала он проверит, существует ли файл в бэкэнде или нет, проверив его имя и идентификатор файла, и сохранит данные в переменной с именем fileId.

Переменная headers будет хранить конфигурацию заголовка файла, используя HttpHeaders.

Если файл уже присутствует в серверной части, появится всплывающее окно с предупреждением о том, что «Файл уже существует». Он будет хранить загруженные байты в переменной uploadedBytes.

Если файл отсутствует в бэкэнде, он начнет загрузку файла с начала или с тех байтов, которые он уже загружен в бэкэнд, и покажет красивую анимацию с использованием mat-spinner.

Вывод:

Вот и все! Были сделаны!

Скачать исходный код на: GitHub🚀

использованная литература

Угловой

Ваши отзывы приветствуются!

Если вам понравилась эта статья, похлопайте или поделитесь ею. Мы всегда ценим вашу помощь.

Прочтите мои другие статьи:

Адаптивная анимированная навигационная панель

Создать диаграмму React-Native

Обмен данными между компонентами с помощью сервиса