2015-08-08 18 views
6

Sto usando mvc di primavera con thymeleaf per caricare un'immagine sul server e visualizzarla dopo aver inviato il modulo in una pagina separata "risultato".l'immagine caricata non viene visualizzata fino a quando non aggiorno la pagina Spring Mvc

il problema è che l'immagine non viene visualizzata fino a quando non riesco ad aggiornare la cartella risorse "static/images/images" in Spring Tool Suite e quindi aggiornare la pagina. Ho modificato le opzioni di lavoro di Eclipse per aggiornare automaticamente e la parte ide risolto, ma ancora bisogno di aggiornare la pagina dei risultati per ottenere l'immagine visualizzata

Questo è il codice di controllo

@RequestMapping(value = "/save", method = RequestMethod.POST) 
public String contentSubmit(@Valid @ModelAttribute ContentEntity cm, BindingResult result, 
     @RequestParam("file") MultipartFile file, Model model) { 
    if (!file.isEmpty()) { 
     try { 
      cm.setImgUrl(file.getOriginalFilename()); 
      byte[] bytes = file.getBytes(); 
      BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("src/main/resources/static/images/"+cm.getImgUrl()))); 
      stream.write(bytes); 
      stream.close(); 
     } catch (Exception e) { 
      //return error page 
     } 
    } 

    if (result.hasErrors()) { 
     return "cms"; 
    } 

    contentDao.addContent(cm); 
    return "view"; 
} 

e questo è il codice della vista

<img th:src="@{'images/'+${contentEntity.imgUrl}}" class="image-responsive thumbnail" /> 
+3

Il server non pubblica le immagini da 'src/main/resources /'. Serve da un'applicazione web creata da questa directory (e altre). Considera l'applicazione web come un grosso file di guerra che non puoi modificare in fase di esecuzione (perché è quello che dovrebbe essere). Considera le immagini caricate come dati, memorizzati da qualche parte ** fuori dall'applicazione ** sul server web di produzione o in un database, perché è quello che sono. È necessario un servlet o un controller che acquisisca un ID immagine, legga il file o il blob del database corrispondente e restituisca i dati al browser, con il tipo di contenuto appropriato. –

risposta

3

Si sta creando pragmaticamente una risorsa (file di immagine) nella directory "src/resources/...". Tuttavia sembra che il server sia server di immagini da una directory differente (ad esempio target/** o bin/**). Pertanto, quando si aggiorna la directory delle risorse, STS rileva che il nuovo file è stato creato di recente e quindi copia il file nella directory di destinazione.

C'è un'opzione in eclipse "hook nativi o polling" che monitorano costantemente le risorse per le modifiche (anche se sono eseguite esternamente a STS/eclipse). Non appena rileva le modifiche, le risorse verranno aggiornate automaticamente.

Si consiglia di impostare questa opzione tramite: Preferenze> Generale> Aree di lavoro> "Aggiorna usando ganci nativi o polling"

enter image description here

Spero che questo aiuti.

Problemi correlati