Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13
  1. #11
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Dovrei andare a leggere la documentazione di Thymeleaf, per sicurezza.

    Comunque un approccio molto migliore è questo. Quando invii il form con i dati per generare la immagine, generi dinamicamente la nuova pagina ma NON la immagine. Nella pagina avrai solo un nuovo url composto del tipo:
    codice:
    <img src="/blabla/immagine.png?parametro1=xxxxx&.........&v=1673511873670">

    Metti tutti i parametri in query string che ti possono servire per generare la immagine. Più un parametro di "versione" per il cache busting che potrebbe essere un incrementale ma anche più banalmente un timestamp (nell'esempio i millisecondi dalla epoch).

    Quel /blabla/immagine.png NON è e non deve essere un file fisico presente nella webapp (non è una buona cosa infatti). Questo url è da gestire con un controller, cioè ci sarà un metodo di controller che risponde su GET /blabla/immagine.png. All'interno di questa request generi la immagine come ti pare. Puoi anche sfruttare eventualmente file "temporanei" se necessario (non c'è nulla di vietato in questo senso, purché univoci, c'è il modo per farlo) e poi, attenzione, fai lo streaming dei byte della immagine nella response.

    Questo ti risolve TUTTI i problemi, pure l'utilizzo "concorrente" o da parte di più utenti.

    Appena riesco nei prossimi giorni scrivo un demo di generazione immagini con Spring Boot 3.
    Grazie, sono costretto ad aspettare la tua demo, perché qui proprio non saprei come fare, eccetto avere quest'altra idea:

    Creare un database dove salverei le immagini(ad esempio tramite la classe BufferedImage? Non POJO?), simile a quanto succede nel link seguente con i Players:

    https://www.youtube.com/watch?v=dFBPkb9qkh4&t=1005s

    Qui viene grosso modo spiegato come usare la Cache, e devo capire ancora bene...mi sembra analogo a lavorare con i database...per il momento non saprei distinguere bene.

    Tuttavia come avrai intuito a me per il momento non occorre salvare in realtà le immagini ma permettere di visualizzarle in tempo reale.
    Ultima modifica di jabjoint; 12-01-2023 a 13:17
    jabjoint

  2. #12
    Ok. Sei stato molto chiaro, tenterò in serata di seguire il tuo suggerimento.
    jabjoint

  3. #13
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Ok. Sei stato molto chiaro, tenterò in serata di seguire il tuo suggerimento.
    codice:
       @Controller
    
    
    
     publicclass EntitaController {
    
    
    
      
     public EntitaController(){
    
     
     
     	}
    
    
    
     
     @Autowired
    
     private InfoDrawService infoDrawService;
    
    
    
     
     
     @PostMapping("/save")
    
     public String postDrawWeb(Model model, @ModelAttribute Entita entita) {    	    	    
    
    
    
     
         	System.out.println(entita.getX()+","+entita.getY()+","+entita.getZ());
     
     intyear = java.time.LocalDateTime.now().getYear();
     intmonth = java.time.LocalDateTime.now().getMonth().getValue();
     intday = java.time.LocalDateTime.now().getDayOfMonth();
     intora = java.time.LocalDateTime.now().getHour();
     intmin = java.time.LocalDateTime.now().getMinute();
     intsec = java.time.LocalDateTime.now().getSecond();
     intnano = java.time.LocalDateTime.now().getNano();    	    
          	String data = year+"-"+month+"-"+day;
         	String time = ora+"-"+min+"-"+sec+"-"+nano;
     
     entita.setData(data);
     entita.setTime(time);
    
     
         	System.out.println(entita.getData());
     
     model.addAttribute("infoSave", entita);
    
    
    
     
     infoDrawService.setInfoDraw(entita);        
     
     return"DrawWebEdit";
    
    
    
         }
    
    
    
     
     @GetMapping("/draw")
    
     public String getDrawWeb() {     
     
     return"DrawWeb";
     
         }
    
    
    
     
     @GetMapping("/immagine.png")
     @ResponseBody
     publicbyte[] getSaveImage(@Param(value="value") String value) { 
     
         	System.out.println(value);    	
          	File file = new File(infoDrawService.getPathImageSave(value));
     
     byte[] bytes = null;
     
     try {
     
     bytes = Files.readAllBytes(file.toPath());
     
     		} catch (IOException e) {
     
     e.printStackTrace();
     		}
     
     returnbytes;
     
         }
     
      }
     
    Senz'altro così funziona...spero di aver fatto bene...?
    jabjoint

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.