Простой загрузчик файлов 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 или плагин, который можно подключить к вашему веб-приложению и позволить пользователям загружать фотографии, видео и текстовые файлы, а также разрешать некоторые базовые модификации, эффекты фильтров и т. д.