Как конвертировать BLOB в .png и отправить его через уведомление Firebase? - PullRequest
1 голос
/ 06 июня 2019

У меня проблема при попытке отправить изображение .png через службу Firebase. Уведомление работает нормально и доходит до моего телефона, но без изображения. Кроме того, я попытался поместить прямую ссылку на изображение из Интернета, но когда я попытался преобразовать BLOB-объект из базы данных в .png и отправить его таким образом, он не отправляет изображение. Я думаю, что я не отправляю изображение правильным способом? Вот мой код контроллера ниже:

Java

    Company company = companyService.findCompanyByName(systemUserService.findByUsername(principal.getName()).getCompany().getName());
    Notification notify = notificationService.findByName(name);

    System.out.println("Title: " + notify.getName());
    System.out.println("Message: " + notify.getText());
    JSONObject body = new JSONObject();
    body.put("to", "/topics/" + TOPIC);
    body.put("priority", "high");

    JSONObject notification = new JSONObject();
    notification.put("title", notify.getName());
    notification.put("body", notify.getText());
    notification.put("sound", "default");

    try {
        byte[] aByteArray = company.getLogo();
        int width = 1;
        int height = 2;

        DataBuffer buffer = new DataBufferByte(aByteArray, aByteArray.length);

        WritableRaster raster = Raster.createInterleavedRaster(buffer, width, height, 3 * width, 3, new int[] {0, 1, 2}, (Point)null);
        ColorModel cm = new ComponentColorModel(ColorModel.getRGBdefault().getColorSpace(), false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
        BufferedImage image = new BufferedImage(cm, raster, true, null);

        ImageIO.write(image, "png", new File("image.png"));
        notification.put("image", image);

    } catch (IOException e) {
        e.printStackTrace();
    }

    JSONObject data = new JSONObject();

    data.put("Key-1", "JSA Data 1");
    data.put("Key-2", "JSA Data 2");

    body.put("notification", notification);
    body.put("data", data);

    HttpEntity<String> request = new HttpEntity<>(body.toString());

    CompletableFuture<String> pushNotification = androidPushNotificationsService.send(request);
    CompletableFuture.allOf(pushNotification).join();

    try {
        String firebaseResponse = pushNotification.get();
        return new ResponseEntity<>(firebaseResponse, HttpStatus.OK);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    return new ResponseEntity<>("Push Notification ERROR!", HttpStatus.BAD_REQUEST);

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Попробуйте что-то вроде этого:

Загрузите изображение с URL и преобразуйте его в строку в кодировке Base64, которая может быть JSONified.

public String jsonifyImage(String imageUrl) {
try {
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        Bitmap bMap =  BitmapFactory.decodeStream(connection.getInputStream());

        ByteArrayOutputStream oStream = new ByteArrayOutputStream();
        bMap.compress(Bitmap.CompressFormat.PNG, 100, oStream);
        byte[] byteArr = oStream.toByteArray();
        return  Base64.getEncoder().encodeToString(byteArr);

    } catch (Exception e) {
        //handle
        return null;
    }
}
0 голосов
/ 06 июня 2019

Результат должен быть image: "...base64 of the image file...".

byte[] aByteArray = company.getLogo();
String image = Base64.getEncoder().encodeToString(aByteArray);
notification.put("image", image);

Конечно, для json изображение не нужно загружать. BLOB-объект должен содержать байты изображения (файла).

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