Как получить параметры request'a при enctype=“multipart/form-data” в сервлете Java?

191
29 ноября 2018, 17:40

Есть POST запрос. Для наглядности, если бы это был GET запрос, то URL выглядел бы так:

http://localhost:8080/tasks?file=1x.jpg&operation=ADD

Необходимо вытащить параметры запроса, а также загрузить файл. Если не указать enctype="multipart/form-data", загрузка не будет работать (через req.getParts()), а если указать, то при попытке получить параметр получаем null:

String operationString = req.getParameter("operation); //null

Как можно при enctype="multipart/form-data" вытащить параметры request'a?

Answer 1

Используйте библиотеку Apache Commons FileUpload

Форма:

<form method="POST" enctype="multipart/form-data" action="fup.cgi">
  File to upload: <input type="file" name="upfile"><br/>
  Notes about the file: <input type="text" name="note"><br/>
  <br/>
  <input type="submit" value="Press"> to upload the file!
</form>

Получение файла (можно использовать как в фильтре так и в сервлете):

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = iter.next();
    if (item.isFormField()) {
        // Достаём поле формы
        processFormField(item);
    } else {
        // Достаём файл
        processUploadedFile(item);
    }
}

Пример кода взят отсюда

READ ALSO
Как сделать в span маску?

Как сделать в span маску?

У меня есть некоторый span(вот ниже), я его заполняю через jquery, можно ли определять вид его по маске, типо если маска xxx-xxx, то текст будет:156-512?

164
Как можно запретить добавлять в проект вызовы некоторых методов?

Как можно запретить добавлять в проект вызовы некоторых методов?

Есть какие-либо приёмы запрещающие добавлять в код проекта, вызовы определенных методов? Кроме организационных, конечноВ частности, хочу...

202
C# Доступ к полям

C# Доступ к полям

У меня есть класс User в которого есть пустой конструктор и 2 public поля Id и Name:

181
Асинхронный метод BeginRead

Асинхронный метод BeginRead

У меня есть код синхронного чтения данных из потокаВ бесконечном цикле идет прослушка:

177