Повреждение строки в Base91 в базе данных MySQL
Я использую Base91 для хранения изображения в виде строки в базе данных MySQL. Когда я получаю строку, чтобы преобразовать ее обратно в изображение, строка кажется поврежденной базой данных.
Я уверен, что он поврежден в базе данных, потому что я провел изолированный тест на одном устройстве, чтобы сделать снимок и преобразовать его в Base91. byte[]
, преобразовав byte[]
в строку (с использованием Latin1), преобразование строки обратно в byte[]
Затем к изображению, и это сработало. Когда я пытаюсь сделать это с сервером посередине, изображения в итоге ломаются.
Я попытался изменить параметры сортировки для конкретного столбца в базе данных с utf8 на ascii на latin1, но не повезло.
Код:
Кодировка изображения:
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));
Хранение закодированного изображения:
JsonObject jsonx = new JsonObject(); jsonx.addProperty("picture", request.getParameter("picture")); db.insert("AppointmentPicture", "(AppointmentID, picture)values(?,?)", new Object[]{appointment.getDbID(), jsonx.toString()}, false);
Получение изображения:
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");
Декодирование изображения:
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); }