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: Используйте аннотацию в другом месте.
Как насчет использования аннотации в отдельном разделе класс (я предполагаю, что он должен присутствовать до того, как объект запроса будет фактически создан...)?
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