2015-08-08 17 views
6

Tôi đang sử dụng mvc mùa xuân với thymeleaf để tải hình ảnh lên máy chủ và hiển thị hình ảnh sau khi gửi biểu mẫu trong một "trang kết quả" riêng biệt.hình ảnh tải lên không hiển thị cho đến khi tôi làm mới trang Spring Mvc

vấn đề là hình ảnh không được hiển thị cho đến khi tôi làm mới thư mục tài nguyên "tài nguyên/tĩnh/hình ảnh" trong Spring Tool Suite và sau đó làm mới trang. tôi sửa đổi tùy chọn không gian làm việc nhật thực để làm mới tự động và phần ide giải quyết nhưng vẫn cần phải làm mới trang kết quả để có được những hình ảnh hiển thị

Đây là mã điều khiển

@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"; 
} 

và đây là mã xem

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

Máy chủ không phục vụ hình ảnh từ 'src/main/resources /'. Nó phục vụ chúng từ một ứng dụng web được xây dựng từ thư mục này (và các ứng dụng khác). Xem xét ứng dụng web như một tệp chiến tranh lớn mà bạn không thể sửa đổi khi chạy (vì đó là những gì nó nên là). Hãy xem xét các hình ảnh được tải lên dưới dạng dữ liệu, được lưu trữ ở đâu đó ** ra khỏi ứng dụng ** trên máy chủ web sản xuất hoặc trong cơ sở dữ liệu, bởi vì đó là những gì chúng đang có. Bạn cần một servlet hoặc bộ điều khiển có một ID hình ảnh, đọc tệp tin tương ứng hoặc blob cơ sở dữ liệu và gửi lại dữ liệu cho trình duyệt, với kiểu nội dung thích hợp. –

Trả lời

3

Bạn đang thực dụng tạo tài nguyên (tệp hình ảnh) trong thư mục "src/resources/...". Tuy nhiên nó xuất hiện rằng máy chủ của bạn là hình ảnh serverig fromm thư mục khác nhau (nói target/** hoặc bin/**). Vì vậy, khi bạn làm mới thư mục tài nguyên, STS phát hiện tệp mới được tạo gần đây và sau đó nó sao chép tệp dưới thư mục đích.

Có một tùy chọn trong nhật thực "bản địa móc hoặc bỏ phiếu" liên tục theo dõi các nguồn lực cho các thay đổi (mặc dù được thực hiện bên ngoài để STS/nhật thực). Ngay khi phát hiện các thay đổi, tài nguyên sẽ tự động được làm mới.

Bạn có thể muốn thiết lập tùy chọn này qua: Preferences> General> Workspaces> "Làm mới sử dụng móc mẹ đẻ hoặc bỏ phiếu"

enter image description here

Hope this helps.

Các vấn đề liên quan