Простой загрузчик файлов Java без зависимостей

Опубликовано: 2023-01-06

Одним из основных требований к современным веб-приложениям и веб-сайтам является возможность загрузки файлов, таких как документы, фотографии и видео. Например, пользователи могут публиковать видео и изображения в социальных сетях, таких как Instagram.

Внедрение и управление процедурой загрузки файлов ранее было сложной задачей. К счастью, загрузка файлов стала проще благодаря достижениям в онлайн-технологиях. Например, загрузчик файлов Java делает загрузку файлов быстрой и удобной.

Однако при загрузке файлов киберпреступники могут ввести вредоносное ПО или другой вредоносный контент на ваш компьютер и повредить сервер. Поэтому разработчики должны быть абсолютно уверены, что загрузка файлов на их веб-сайт или веб-приложение безопасна. Чтобы установить безопасную загрузку файлов, мы рекомендуем вам использовать надежный SDK для загрузки файлов Java.

В этой статье мы рассмотрим, как использовать Java для создания загрузчика файлов.

Как реализовать загрузчик файлов с помощью Java?

Загрузчик файлов — это не что иное, как «отправить», по которому пользователи могут щелкнуть, чтобы загрузить файл в веб-приложение или на веб-сайт. Однако загрузчик файлов значит для разработчиков значительно больше.

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

Мы подаем в суд на метод POST, чтобы отправить данные формы, включая файл, на сервер. Кроме того, когда мы загружаем файлы, мы используем encrypt="multipart/form-data", потому что файлы содержат много непечатаемых символов.

Сервлет управляет запросом POST и извлекает файл из потока после обработки входящих данных файла. Место назначения указывает место в системе, где должен быть сохранен файл. Когда мы нажимаем кнопку «Загрузить», данные передаются сервлету, который затем сохраняет файл в указанном месте.

Создание HTML-файла с полем ввода

Прежде чем мы начнем, создайте файл index.html .

В index.html должен быть следующий код:

<!ДОКТИП HTML>
<html lang="ru">
<голова>
<title>Загрузчик файлов Java</title>
<meta http-equiv="Content-Type" content="text/html; кодировка=UTF-8″>
</голова>
<тело>
<form method="POST" action="upload" enctype="multipart/form-data" >
Файл:
<input type="file" name="java-file" id="java-file" /> <br/>
Место назначения:
<input type="text" value="/java-folder" name="destination"/>
</br>
<input type=”submit” value=”Submit” name=”submit” id=”submit” />
</форма>
</тело>
</html>

Вот какой должна быть ваша страница:

Обработка обработки файла на стороне сервера

Чтобы записать код сервлета, мы создадим файл с именем FileUploadServlet.java. Серлеты используют аннотации для определения компонентов и метаданных. Таким образом, аннотация @WebServlet используется для определения компонента сервлета в Java.

В аннотации сервлета должно быть указано, какой HttpServlet должен выполняться для какого URL-адреса. Для этого мы определяем параметры name и ulrPattern в нашей аннотации @WebServlet. Обратите внимание, что когда мы отправляем нашу форму, мы перенаправляем на URL-адрес /upload, где будет выполняться класс FileUploadServlet.

Аннотация @MultipartConfig информирует сервлет о том, что он собирается получить multipart/form-data в типе MIME.

Давайте напишем наш полный код сейчас.

@WebServlet(name = «FileUploadServlet» , urlPatterns = { «/upload» })
@MultipartConfig
открытый класс FileUploadServlet расширяет HttpServlet {

закрытый окончательный статический регистратор LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

protected void processRequest (запрос HttpServletRequest,
Ответ HttpServletResponse)
бросает ServletException, IOException {
response.setContentType( "text/html;charset=UTF-8" );

конечная строка dest= request.getParameter( "destination" );
конечная часть часть = request.getPart ( «файл» );
окончательная строка nameOfFile = getFileName(part);

Выходной поток = ноль ;
Входной поток продолжение = ноль ;
окончательный PrintWriter printWriter = response.getWriter();

попробуй {
out = новый FileOutputStream( новый File(dest + File.separator
+имяФайла));
продолжение = часть.getInputStream();

читатель = 0 ;
конечный байт[] байты = новый байт[ 1024 ];

в то время как ((читатель = cont.read(байты)) != -1 ) {
out.write(байты, 0 , считыватель);
}
printWriter.println ( «Файл « + nameOfFile + », созданный в « + место назначения» );
LOGGER.log(Level.INFO, «Файл{0} загружен в {1}» ,
новый Объект[]{имяФайла, место назначения});
} поймать (FileNotFoundException fne) {
printWriter.println( "Вы не указали имя файла или "
+ «пытается загрузить файл на несуществующий «
+ «местоположение». );
printWriter.println ( "<br/> ОШИБКА: " + fne.getMessage());

LOGGER.log(Level.SEVERE, «Ошибка при загрузке файла. Ошибка: {0}» ,
новый объект[]{fne.getMessage()});
} наконец {
если (из != null ) {
выход.закрыть();
}
если (продолжение!= ноль ) {
продолжение.закрыть();
}
если (printWriter != ноль ) {
printWriter.close();
}
}
}

частная строка getFileName (заключительная часть) {
final String partHeader = part.getHeader ( «content-disposition» );
LOGGER.log(Level.INFO, «Заголовок части = {0}» , partHeader);
for (Содержимое строки: part.getHeader( "content-disposition" ).split( ";" ))) {
если (content.trim().startsWith( "имя файла" )) {
вернуть содержимое.подстрока(
content.indexOf( '=' ) + 1 ).trim().replace( "\"" , "" );
}
}
вернуть ноль ;
}
}

Метод processRequest вызывает метод getFileName для получения имени файла из файловой части после извлечения места назначения и файловой части из запроса. После этого метод создает FileOutputStream и передает файл в нужное место. Часть обработки ошибок метода обнаруживает и устраняет несколько наиболее частых причин ошибок, связанных с ненайденным файлом.

Разверните код

Теперь нам нужно собрать и запустить нашу программу. Для этого вы можете использовать любую предпочитаемую вами IDE, такую ​​как NetBeans, Eclipse, Intellij Idea и т. д. После того, как вы это сделаете, перейдите к

https://cdn.pixabay.com/photo/2016/11/30/20/58/programming-1873854__340.png

Если вы используете NetBeans, откройте среду IDE Netbeans и перейдите в рабочий каталог. Обратитесь к официальной документации Java, если у вас возникли проблемы. Щелкните правой кнопкой мыши папку на вкладке «Проекты» и выберите «Развернуть». Затем мы можем получить доступ к браузеру и ввести следующий URL-адрес:

http://локальный:8080/{имя папки}/

Созданная выше HTML-страница откроется после того, как вы введете URL-адрес и нажмете клавишу ввода. Чтобы загрузить файл в нужное место, мы можем выполнить поиск в системе и выбрать файл. Мы вводим путь к папке, в которой мы хотим сохранить файл в области назначения. Каталог должен быть доступен для записи и уже существовать в системе. Когда мы нажимаем кнопку загрузки с пустым полем назначения, возникает исключение.

Сервлет получает запрос POST, когда мы нажимаем кнопку загрузки, и копирует выбранный файл в указанную папку.

Мы можем посетить указанную папку и проверить, есть ли загруженный файл (например, TextFile.txt) после нажатия кнопки загрузки.

До сих пор мы создавали простой загрузчик файлов Java, используя HTML и Java. Однако по мере того, как «простой» становится сложным загрузчиком со многими функциями, может быть трудно отследить важные функции от тех, которые не являются таковыми. Не говоря уже о том, что при создании загрузчика с нуля возникает несколько проблем с безопасностью. Поэтому в следующем разделе вы узнаете, как загружать файлы с помощью безопасного SDK Filestack.

Как легко загружать файлы с помощью Filestack SDK

Чтобы продолжить, вам понадобится ключ Filestack API .

Для начала установите Filestack SDK с помощью следующей команды:

реализация 'com.filestack:filestack-java:0.9.0'

Чтобы реализовать функции загрузки с помощью Filestack, используйте следующий код в файле Java:

// Создание клиента
Конфигурация конфигурации = новая конфигурация ( «API_KEY» );
Клиент-клиент = новый клиент (конфигурация);

// Настройка параметров и метаданных, связанных с загрузкой
Вариант StorageOptions = новый StorageOptions.Builder()
.mimeType ( «текст/обычный» )
.filename( "file.txt" )
.строить();

// Выполняем синхронную загрузку
FileLink files = client.upload ( «/filepath» , false );

// Выполняем асинхронную загрузку
Flowable<Progress<FileLink>> upload = client.uploadAsync ( « путь к файлу» , false );
upload.doOnNext( новый Потребитель<Прогресс<Ссылка на файл>>() {
@Override
public void accept(Progress<FileLink> progress) выдает Exception {
System.out.printf ( «%f%% Ваш файл загружен\n» , progress.getPercent());
если (прогресс.getData() != ноль ) {
FileLink files = progress.getData();
}
}
});

Чтобы убедиться, что он работает, можно запустить следующие тесты:

./файлы тест

Если вы хотите развернуть свое приложение, Bintray является целью развертывания. Для развертывания вам потребуется учетная запись пользователя, зарегистрированная в организации Filestack. Также соблюдайте основные рекомендации по выпуску Filestack. Необходимы переменные среды «BINTRAY USER» и «BINTRAY API KEY». Бежать:

экспортировать BINTRAY_USER=
экспортировать BINTRAY_API_KEY=
./файлы BintrayЗагрузить

Заключение

Вы также можете выбрать сторонний инструмент, если вам сложно поддерживать и создавать собственную систему загрузки файлов Java. Из соображений безопасности и конфиденциальности данных люди могут избегать использования сторонних систем, например, при загрузке файлов с медицинскими записями.

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

Часто задаваемые вопросы (FAQ)

Можно ли перемещать файлы с помощью API?

Да. Перемещение файлов с помощью API можно выполнить с помощью доступных на рынке инструментов на основе API. Это можно комбинировать с программами, работающими на различных платформах, например с онлайн-программами.

Могу ли я отправить большой файл в REST API?

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

Как Java читает загруженный файл?

Используя входные потоки, программа на Java считывает наборы байтов или символов. Чтение файла — это последовательная операция, которая начинается с построения файлового объекта, передает его во входной файл, считывает данные из потока, обрабатывает их, а затем закрывает поток и файловый объект.

Что такое инструмент загрузки файлов?

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