Я не могу использовать запрос, поскольку в многочастных реализациях есть некоторые недостатки.
Тогда ваша настоящая проблема в том, что вы используете плохую реализацию. Кодировка запроса multipart/form-data
по умолчанию не поддерживается API сервлета, вы ничего не увидите на карте параметров запроса. Чтобы получить загруженный файл и другие параметры запроса, вам нужно проанализировать InputStream
из HttpServletRequest
самостоятельно. Но, к счастью, есть широко используемый API, который может взять на себя драгоценную и утомительную работу из ваших рук: Apache Commons FileUpload . На их домашней странице вы можете найти множество примеров кода и важные советы и рекомендации в разделах Руководство пользователя и Часто задаваемые вопросы . Прочитайте их внимательно. По сути, вам просто нужно получить InputStream
из объекта FileItem
и записать его на любой OutputStream
на свой вкус, используя обычный Java IO способ. Для этого вы даже можете использовать сокращение FileItem#write()
.
При необходимости вы также можете написать Filter
, который использует Apache Commons FileUpload под капотом и проверять каждый запрос, если он равен multipart/form-data
, и если это так, затем поместить параметры обратно в карту параметров запроса с помощью Объединяет FileUpload и помещает загруженные файлы (или исключения) в качестве атрибутов запроса, чтобы в конечном итоге это стало немного более прозрачным в вашем коде сервлета. Вы можете найти здесь базовый пример, чтобы получить идею.
Подводя итог: не придумывайте обходных путей / хаков, чтобы "исправить" эту проблему Конечно, не используйте Ajax для установки параметров запроса в сеансе, пока они не будут отправлены на сервер. Просто используйте правильное решение для проблемы. Используйте хороший multipart/form-data
парсер.
Надеюсь, это поможет.