Надуйте GZipped Byte Array в React JS / Браузер - PullRequest
0 голосов
/ 12 марта 2020

У меня есть случай, когда я отправляю огромный json с сервера на клиент с помощью веб-сокетов. Мне нужно сжать json и отправить его клиенту, чтобы браузер мог его раздувать до json. Я могу сжать json в Java, но не могу накачать его до json в браузере. Я получаю ответ ниже в пользовательском интерфейсе. ответ сервера

Я не могу раздуть ответ. Я использовал pako, Zlib и другие библиотеки, но ничего не помогло.

Ниже приведен мой код сжатия Java:

@Override
public void sendMessage(String destination, Object data) {
    log.debug("Sending message to topic {}. Message to be sent: {}", destination, data);
    messagingTemplate.convertAndSend(destination, data,
            new MessagePostProcessor() {
                ZipInputStream z = null;
                public Message postProcessMessage(Message message) {
                    final Object payload = message.getPayload();
                    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
                    byte[] bytesToCompress = null;
                    if (payload instanceof byte[]) {
                        bytesToCompress = (byte[]) payload;
                        MessageBuilder<?> builder = MessageBuilder.withPayload(getZippedBytes(bytesToCompress));
                        StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SEND);
                        headers.setDestination(destination);
                        MessageHeaders msgHeaders = new MessageHeaders(headers.toMap());

                        if (msgHeaders != null) {
                            builder.copyHeaders(msgHeaders);
                        }
                        MimeType mimeType = new MimeType("application", "zip", StandardCharsets.UTF_8);

                        if (mimeType != null) {
                            builder.setHeaderIfAbsent("contentType", mimeType);
                        }

                        return builder.build();
                    }
                    return message;
                }
            });
}

public static byte[] getZippedBytes(byte[] contents) {
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
        GZIPOutputStream zip = new GZIPOutputStream(baos);
        zip.write(contents);
        zip.close();
        return baos.toByteArray();
    } catch(IOException e) {
        throw new IllegalStateException("error occurred while compressing raw message", e);
    }
}

Я пытаюсь получить json обратно в клиентская сторона, использующая библиотеку Zlib, но не может ничего получить. Может кто-нибудь, пожалуйста, помогите.

  function subscribeToTopic() {
    //subscribe to the topic
    stompClient.subscribe(url, (data) => {
      zlib.gunzip(data.body, function(err, buffer) {
        if (!err) {
          alert(buffer.toString());
        }});
    }, { id: subscriptionId });
  }
...