Java Сервлеты С Использованием MultipartConfig



Я использую сервлет catch-all и передаю объект запроса другим внутренним классам фреймворка. Это то, как мое приложение разработано. Причины этого выходят за рамки данного вопроса.



@WebServlet(name="RequestHandler", urlPatterns="/*")


Я пытаюсь сделать загрузку файлов из браузера с помощью multipart-form-data:



<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" name="videoUpload" value="Upload"/>
</form>


И единственный способ фактически передать файловые данные на сервер-это аннотировать сервлет следующим образом:



@MultipartConfig


Если я аннотирую свой сервлет catch-all, все работает нормально, но его не очень часто вообще, что мне на самом деле нужно использовать функциональность загрузки файлов.



Вариант 1: оставьте его в покое.
вызывает ли оставление аннотации ненужные накладные расходы, даже если большинство запросов не используют ее?



Вариант 2: добавить его программно?
Есть ли способ программно добавить аннотацию, если обнаружен тип формы multipart?



Вариант 3: Используйте аннотацию в другом месте.
Как насчет использования аннотации в отдельном разделе класс (я предполагаю, что он должен присутствовать до того, как объект запроса будет фактически создан...)?

714   1  

1 ответ:

Это нормально, если вы не добавляете аннотацию "@MultipartConfig". Программно можно определить, является ли содержимое составным или нет:

 String form_field="";
 FileItem fileItem = null; 
 if (ServletFileUpload.isMultipartContent(request)) {
            ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
            try {
                fileItemsList = servletFileUpload.parseRequest(request);
            } catch (FileUploadException ex) {
                out.print(ex);
            }
            String optionalFileName = "";
            Iterator it = fileItemsList.iterator();
            while (it.hasNext()) {
                FileItem fileItemTemp = (FileItem) it.next();
                if (fileItemTemp.isFormField()) {
                    if (fileItemTemp.getFieldName().equals("form_field")) {
                        form_field = fileItemTemp.getString();
                    }
                } else {
                    if (fileItemTemp.getFieldName().equals("file")) {
                        fileItem = fileItemTemp;
                    }
                }
            }
        }

Если ServletFileUpload.isMultipartContent (request) является false, то вы можете получить параметры формы в общем виде по запросу.getParameter. В этом примере я использовал Apache File upload.

Comments

    Ничего не найдено.