oracle db хранит блоб изображения в базе данных с помощью GWT - PullRequest
0 голосов
/ 20 декабря 2018

Я использую GWT для загрузки изображения, а затем пытаюсь сохранить его в базе данных.клиентская сторона выбирает изображение, а затем передает его сервлету http, где этот класс пытается вставить его в базу данных.

Он не будет обновлять столбец таблицы с изображением, но я создал тестовый байтовый массив с некоторым текстом, который будет помещен в столбец.

Столбец таблицы равен

enter image description here

Когда я создал столбец, я не указал размер.

Я не публикую код клиента, потому что не думаю, что он будет полезенВот.Поскольку байтовый массив очень хорошо подходит сервлету.

Вот класс сервлетов

    public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {

    long maxFileSize = 20480;
    long sizeInBytes = 0;
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);

    String entityId = request.getParameter("entityId");
    int id = Integer.parseInt(entityId);



    try {

        List items = upload.parseRequest(request);

        Iterator iter = items.iterator();

        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();

            //handling a normal form-field
            if(item.isFormField()) {
                System.out.println("Got a form field");
                String name = item.getFieldName();
                String value = item.getString();
                System.out.print("Name:"+name+",Value:"+value);

            } else {

                //handling file loads
                System.out.println("Not form field");
                String fieldName = item.getFieldName();
                String fileName = item.getName();
                if (fileName != null) {
                    fileName = FilenameUtils.getName(fileName);
                }

                String contentType = item.getContentType();
                boolean isInMemory = item.isInMemory();
                 sizeInBytes = item.getSize();


                    byte[] data = item.get();

                    API.GetAccountManager().saveLogo(id, data);

База данных находится локально, и я нахожусь в среде разработчика.Я могу записать изображение в папку Tomcat, поэтому я знаю, что массив байтов правильный.Размер изображения составляет 10 КБ.размер массива байтов данных 10705

отладка. Я вижу, что изображение сначала сохраняется во временной папке в tomcat.

Вот класс с вызывающим методом.

public void saveLogo(final int accountID,  byte[] data){

            Statement stmt = null;
            Connection connection;
            int rowCount;
            PreparedStatement pstmt = null;

            try {
                connection = API.GetConnection();
                pstmt = connection.prepareStatement(
                        "UPDATE account SET LOGO = ? WHERE account.id = ?");

                byte[] testBytes  = "this is a test".getBytes();
                //  pstmt.setBytes(1, data);
               pstmt.setBinaryStream(1,new ByteArrayInputStream(data),data.length);
              //  pstmt.setBinaryStream(1,new ByteArrayInputStream(testBytes),testBytes.length);
                pstmt.setInt(2, 5);
                 rowCount = pstmt.executeUpdate();
                 pstmt.execute();
                 connection.commit();
            }catch (Exception exception) {
                exception.printStackTrace();
                if (exception instanceof DatabaseException) {
                    throw (DatabaseException) exception;
                }
                throw new DatabaseException("There was a problem executing a database call.", exception);
            } finally {
                if (pstmt != null) {
                   // pstmt.close();
                }
            }
}

Этот класс все еще нуждается в работе.Я могу вставить testBytes, но 0 rowCount обновляется данными byte [].

Почему это не работает с реальным изображением, но работает с простым текстом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...