Ошибка загрузки изображения J2ee: java.lang.IllegalStateException

Я пытаюсь загрузить изображение в базу данных через форму jsp. Но есть ошибка, т.к.

java.lang.IllegalStateException: Request.getPart вызывается без составной конфигурации. Либо добавьте @MultipartConfig в сервлет, либо элемент multipart-config в web.xml.

Мой код сервлета;

/* image */
            Part filePart = request.getPart("eImage"); //here is the error
            InputStream inputStream = null;

            if (filePart != null) {
                System.out.println(filePart.getName());
                System.out.println(filePart.getSize());
                System.out.println(filePart.getContentType());

                inputStream = filePart.getInputStream();
            }

Но когда я добавляю,

<multipart-config>
    <location>/tmp</location>
    <max-file-size>20848820</max-file-size>
    <max-request-size>418018841</max-request-size>
    <file-size-threshold>1048576</file-size-threshold>
</multipart-config>

как дочерний элемент, согласно https://docs.oracle.com/javaee/7/tutorial/servlets011.htm, но также возникает ошибка как;

Серьезный: исключение при развертывании приложения [events_handeling]: org.xml.sax.SAXParseException; номер строки: 12; номер столбца: 23; Файл дескриптора развертывания WEB-INF/web.xml в архиве [web]. cvc-complex-type.2.4.a: Обнаружено недопустимое содержимое, начинающееся с элемента «multipart-config».

веб.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <multipart-config>
        <location>/tmp</location>
        <max-file-size>20848820</max-file-size>
        <max-request-size>418018841</max-request-size>
        <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>
</web-app>

Как это можно исправить?


person Community    schedule 05.07.2018    source источник
comment
Где вы разместили группу тегов ‹multipart-config›? Или вы можете опубликовать весь web.xml?   -  person Shreyas    schedule 05.07.2018
comment
@Shreyas отредактировано   -  person    schedule 05.07.2018
comment
Спасибо. И помог ли приведенный ниже ответ Рави?   -  person Shreyas    schedule 05.07.2018
comment
@Shreyas да :)   -  person    schedule 06.07.2018


Ответы (1)


Напишите (enctype="multipart/form-data") в JSP или HTML-странице внутри тега.

<form name="form1" method="post" enctype="multipart/form-data" action="insertimage.jsp">
<input type="file" name="ImageFile" id="ImageFile" />
<input type="submit" name="submit" value="submit" />
</form>

Функция Java для чтения файла из запроса

   try {
            String ImageFile="", itemName = "";
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (isMultipart) {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List items = null;
                try {
                    items = upload.parseRequest(request);
                }
                catch (FileUploadException e) { 
                    e.getMessage();
                }

                Iterator itr = items.iterator();
                while (itr.hasNext()) {
                    FileItem item = (FileItem) itr.next();
                    if (item.isFormField()) {
                        String name = item.getFieldName();
                        String value = item.getString();
                        if(name.equals("ImageFile")) {
                            ImageFile=value;
                        }
                    }
                    else {
                        try {
                            itemName = item.getName();  
                            File savedFile = new File("config.getServletContext().getRealPath("/")+"Example\\image-folder\\"+itemName);
                            item.write(savedFile);
                        }
                        catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        catch (Exception e) {
            out.println(e.getMessage());
        }

Считайте файл из этого кода и сохраните в базу данных.

person R.S.Saini    schedule 05.07.2018