簡體   English   中英

無法從控制器中的src/main/webapp/WEB-INF/resources/img訪問圖像文件以在jsp中顯示

[英]Can't access image file from src/main/webapp/WEB-INF/resources/img in controller to display in jsp

我嘗試顯示src/main/webapp/WEB-INF/resources/img/文件夾中的圖像(不同於src/main/resources

@Controller
@RequestMapping("/items")
public class ItemsController {
    @GetMapping( "/images/{itemId}")
    @ResponseBody
    public byte[] getItemImageById(@PathVariable long itemId) throws IOException {
           BufferedImage originalImage =
                ImageIO.read(
            new File("/WEB-INF/resources/img/" + itemId + ".png"));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write( originalImage, "png", baos );
        baos.flush();
        byte[] imageInByte = baos.toByteArray();
        baos.close();
        return imageInByte;
    }
}
<img src='${pageContext.request.contextPath}/items/images/1'/>

它不起作用 - 沒有圖像,但是如果我用這樣的絕對路徑替換File構造函數中的路徑: C://.../some_file.png它工作正常。

您無法通過“文件”讀取您需要通過ServletContext 的圖像

@Controller
@RequestMapping("/items")
public class ItemsController {

   @Autowired
   ServletContext context;

    @GetMapping( "/images/{itemId}")
    @ResponseBody
    public byte[] getItemImageById(@PathVariable long itemId) throws IOException {
           BufferedImage originalImage =
                ImageIO.read(context.getResourceAsStream("/WEB-INF/resources/img/" + itemId + ".png"));

        // your original code
    }
}

另一種對我有用的方法是:

@Autowired
ResourceLoader resourceLoader;

Resource resource =  resourceLoader.getResource(
                "/WEB-INF/resources/img/" + itemId + ".png");
String path = resource.getFile().getPath();
return Files.readAllBytes(Paths.get(path));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM