Как сохранить данные между методами

У меня есть контроллер, который создает много изображений из pdf (pdfBox). Я сохраняю все изображения в List. И мне нужно отправлять одно изображение для каждого просмотра, когда я нажимаю кнопку. или введите значение

public class Pdf{
     public byte[] PDFCREATE(){
      byte[] pdf = ...;
        //Code for creating pdf using Itext
       return pdf;

    }
}

    public List<byte[]> getImage(byte[] pdf) throws Exception{
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
       List<byte> listImg = new List()<>;
        try (final PDDocument document = PDDocument.load(file)){
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            for (int page = 0; page < document.getNumberOfPages(); ++page)
            {
                BufferedImage bim = pdfRenderer.renderImage(page)
                ImageIO.write(bim, "png",baos);
                   listImg.add(baos)

            }
            document.close();
        } catch (IOException e){
            System.err.println("Exception while trying to create pdf document - " + e);
        }
        return baos.toByteArray();

С видом я Почта:

   public ResponseEntity<?> CreateFont(int pictureNumber ) {
        PDF pdf= new PDF();
PdfToImg pdfToImg = new PdfToImg();
List<byte []> fileBytes = pdfToImg.getImage(pdf.PDFCREATE());
byte[] encoded= Base64.encodeBase64(fileBytes.get(pictureNumber ));
String encodedString = new String(encoded);

            return new ResponseEntity<String>(
                    "<img src='data:image/jpeg;base64,"  + encodedString + "' alt='' width='420' height='580'>",
                    HttpStatus.OK);

Но здесь мне каждый раз приходится создавать pdf. Можно ли просто сохранить значения из getImage в список?. И когда пользователь вводит значение (pictureNumber) или нажимает кнопку каждый раз, чтобы не создавать новый pdf. И вместо этого принимать значения из List.И создайте новый список после обновления страницыI нужно где-то хранить Список fileBytes, а где?

Извините за мой английский

Делайте это правильно - используйте базу данных. MySQL бесплатен, как и MongoDB. Если вы когда-либо масштабируете более чем на один сервер, списки в памяти не будут работать, когда ваш пользователь будет перенаправлен на другой сервер. Даже если это просто игрушечное приложение для школьников, научитесь делать это правильно. Этот опыт пригодится вам на собеседовании.

Andy Brown 14.12.2018 16:03

@ Andy Brown Просто эта информация нужна только перед обновлением страницы .. В db будет много мусора (

crazy_deviL 14.12.2018 16:13

@ Энди Браун Или просто каждый раз переписывать информацию в BD?

crazy_deviL 14.12.2018 16:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это может помочь вам:

private static Map<Integer, String> pictureMap = new HashMap<>();
private static PDF pdf;

public ResponseEntity<?> CreateFont(int pictureNumber) {
    if (pictureMap.containsKey(pictureNumber))
        return response(pictureMap.get(pictureNumber));
    if (pdf == null)
        pdf = new PDF();
    PdfToImg pdfToImg = new PdfToImg();
    List<byte[]> fileBytes = pdfToImg.getImage(pdf.PDFCREATE());
    byte[] encoded = Base64.encodeBase64(fileBytes.get(pictureNumber));
    String encodedString = new String(encoded);
    pictureMap.put(pictureNumber, encodedString);

    return response(encodedString);
}


private ResponseEntity response(String encodedString){
    return new ResponseEntity<String>(
        "<img src='data:image/jpeg;base64," + encodedString + "' alt='' width='420' height='580'>",
        HttpStatus.OK);
}

Разве это не называется для каждого поста: PDF pdf = new PDF (); ?

crazy_deviL 13.12.2018 22:11

@crazy_deviL в верхней части метода он проверит, вычислена ли кодированная строка ранее и сохранена ли на карте, он будет извлекать данные и не вычислять PDF pdf = new PDF(); снова

Mohsen 13.12.2018 22:12

@Spara Но сначала pictureNumber не будет в Map, он будет сохранен только после того, как пользователь отправит данные. И каждый раз присылает 0.1.2 ... 100. И все это время все классы будут вызываться (

crazy_deviL 13.12.2018 22:18

Ага PDF pdf = new PDF(); всегда одинаковый для всех номеров картинок? Вы можете сделать его статичным. Я обновлю свой ответ, чтобы рассказать об этом

Mohsen 13.12.2018 22:21

@crazy_deviL, пожалуйста, проверьте мой ответ

Mohsen 13.12.2018 22:23

@SparaBut Спасибо, а как обновлять статику, при перезагрузке страницы?

crazy_deviL 13.12.2018 22:46

@crazy_deviL, почему вы хотите снова создать PDF-файл при перезагрузке страницы? Может быть, если я знаю причину, я смогу помочь тебе принять лучшее решение

Mohsen 13.12.2018 22:51

@SparaBut Будет очень сложно объяснить, что я делаю). Я очень плохо говорю по-английски .. Если без описания всех деталей: 1 Пользователь вводит данные, и PDF создается на основе их данных, 2. Появляется изображение первой страницы их PDF (окно PDF)

crazy_deviL 13.12.2018 22:59

3. Если PDF-файл содержит более одной страницы, пользователь может переключать страницы с помощью стрелок (<- ->). И поэтому написал свою проблему, из-за переключения между стрелками. 4. Когда пользователь обновляет страницу, стираются все данные (в том числе статические).

crazy_deviL 13.12.2018 22:59

Позвольте нам продолжить обсуждение в чате.

Mohsen 13.12.2018 23:07

Когда пользователь перезагружает страницу, он должен вызвать другой запрос на отдых. там можно установить pdf = null.

Mohsen 13.12.2018 23:12

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