Ошибка загрузки изображения J2ee: java.lang.IllegalStateException - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь загрузить изображение в базу данных через форму 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'.

web.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>

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

1 Ответ

0 голосов
/ 05 июля 2018

Запись (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());
        }

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

...