Введение
Процессор, разработанный для передачи и загрузки больших файлов по частям с возможностью возобновления загрузки с прерванного места. Поддерживает отправку информации о прогрессе загрузки и скачивания, а также о скорости этих процессов.
Поскольку реализация протокола передачи больших файлов через веб-страницу и сервер представляет определённые сложности, проекты клиентской и фронтендной частей не развёртываются на отдельном сервере, а запускаются на локальном компьютере. Это позволяет использовать файлы системы локального компьютера и обеспечивает работу веб-страницы.
Архитектура программного обеспечения
- Фронтендная служба (frontend-service) — простая реализация веб-страницы (зависит от netty-client).
- Netty-client — клиентская часть на основе Netty.
- Netty-common — общие компоненты сервера Netty.
- Netty-server — серверная часть Netty (зависит от netty-common).
- MongoDB — предоставление данных об операциях (загрузка, скачивание, завершённые загрузки).
Техническая реализация
- Передача данных по частям осуществляется через HTTP 1.1 с использованием кодировки transfer-encoding:chunked. Код добавляется как во фронтендную часть, так и на серверную часть Netty:
pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
- Возобновление загрузки реализуется через класс RandomAccessFile, который может вызывать большое количество операций ввода/вывода, снижая эффективность. При первой загрузке файл не разделяется с помощью RandomAccessFile. Если загрузка прерывается и возобновляется позже, клиент запрашивает у сервера текущий размер загруженного файла. Затем клиент использует RandomAccessFile для разделения файла и продолжает загрузку через интерфейс. Аналогичный процесс применяется при скачивании, где сервер отправляет клиенту информацию о уже скачанной части файла, используя RandomAccessFile для его разделения перед отправкой.
- На сервере Netty без Spring Boot MVC пришлось вручную реализовать функции MVC.
- Поскольку Netty по умолчанию поддерживает передачу файлов по частям, но не возобновление загрузки, был модифицирован код Netty, отвечающий за приём и запись файлов. Подробности изменений можно найти в следующих файлах:
- netty-server/src/main/java/com/netty/my/MyAbstractDiskHttpData.java;
- netty-server/src/main/java/com/netty/my/MyDefaultHttpDataFactory.java;
- netty-server/src/main/java/com/netty/my/MyDiskFileUpload.java.
Инструкция по установке
- Конфигурация класса подключения клиента к серверу находится в файле netty-client/src/main/java/com/netty/Constants.java. Здесь указываются IP-адрес сервера и порт WebSocket.
- Запустите фронтендный клиент frontend-service на локальном компьютере как Spring Boot сервис.
- Установите MongoDB на свой компьютер.
- Конфигурационный класс сервера находится в файле netty-client/src/main/java/com/netty/Constants.java. Обратите внимание, что в поле WEBSOCKET_IP можно указать только 0.0.0.0.
- Разверните сервер Netty-server. Для этого запустите команду java -jar xxxx.jar.
Использование
- Откройте веб-браузер и перейдите на страницу http://localhost:8789/frontend/file.
- В левом верхнем углу нажмите на значок «+», чтобы создать корневую директорию.
- Рядом с каждой директорией есть значок «+». Он позволяет создавать поддиректории.
- Выберите директорию, чтобы увидеть список файлов, успешно загруженных в неё.
- Нажмите на кнопку «Загрузить файл» и выберите файл из файловой системы вашего компьютера.
- После выбора файла нажмите на кнопку «Подтвердить», чтобы начать передачу файла по частям. Можно загружать несколько файлов одновременно.
- Центр загрузки поддерживает возобновление передачи. Вы можете приостановить загрузку, а затем продолжить или отменить её.
- После успешной загрузки файла список файлов обновится.
- Для каждого файла в списке есть кнопка «Скачать». Выберите файл и нажмите «Подтвердить» для начала скачивания. Укажите папку на вашем компьютере, куда вы хотите сохранить файл.
- Центр скачивания работает аналогично центру загрузки и поддерживает возобновление скачивания.
Комментарии ( 0 )