Повреждение строки в Base91 в базе данных MySQL

Я использую Base91 для хранения изображения в виде строки в базе данных MySQL. Когда я получаю строку, чтобы преобразовать ее обратно в изображение, строка кажется поврежденной базой данных.

Я уверен, что он поврежден в базе данных, потому что я провел изолированный тест на одном устройстве, чтобы сделать снимок и преобразовать его в Base91. byte[], преобразовав byte[] в строку (с использованием Latin1), преобразование строки обратно в byte[]Затем к изображению, и это сработало. Когда я пытаюсь сделать это с сервером посередине, изображения в итоге ломаются.

Я попытался изменить параметры сортировки для конкретного столбца в базе данных с utf8 на ascii на latin1, но не повезло.

Код:

  1. Кодировка изображения:

    File file1 = new File(path);
    FileInputStream in = new FileInputStream(file1);
    
    byte[] imagesBytes = new byte[(int) file1.length()];
    in.read(imagesBytes, 0, (int) file1.length());
    
    _picture = new String(Base91.encode(imagesBytes), Base91.CHARSET);
    //appointment.addPicture(new String(Base91.encode(imagesBytes), Base91.CHARSET));
    
  2. Хранение закодированного изображения:

     JsonObject jsonx = new JsonObject();
     jsonx.addProperty("picture", request.getParameter("picture"));
    
     db.insert("AppointmentPicture",
                "(AppointmentID, picture)values(?,?)",
                new Object[]{appointment.getDbID(), jsonx.toString()},
                false);
    
  3. Получение изображения:

    ResultSet rSet = db.query("AppointmentPicture", new String[]{"picture"}, "AppointmentID = ?", new Object[]{appointmentID});
        System.out.println("pictures grabbed");
    
        JsonObject json = new JsonObject();
        int counter = 0;
    
        while (rSet.next()) {
            counter++;
            json.addProperty(String.valueOf(counter), rSet.getString("picture"));
    
        }
    
        json.addProperty("count", String.valueOf(counter));
    
        response.getWriter().write(json.toString());
        System.out.println("pictures returned");
    
  4. Декодирование изображения:

     String serverResponse = in.readLine();
    
     JSONObject json = new JSONObject(serverResponse);
    
     int count = Integer.parseInt(json.getString("count"));
    
     for(int i = 0; i < count; i++){
    
         JSONObject j = new JSONObject(json.getString(String.valueOf(i + 1)));
         byte[] picBytes = j.getString("picture").getBytes(Base91.CHARSET);
         File file = new File(imageDirectory, String.valueOf(System.currentTimeMillis()) + ".jpeg");
         BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
         out.write(picBytes, 0, picBytes.length);
    
     }
    

0 ответов

Другие вопросы по тегам