| 場景 | 獲取方式 | 示例 |
|---|---|---|
| Web 頁面 (JSP/HTML) | 相對 WebRoot 路徑 | <img src="/images/logo.png">(以 / 開頭相對 contextPath) |
| Java 代碼讀取 resources | ClassLoader.getResourceAsStream | InputStream is = getClass().getResourceAsStream("/img/01.jpg"); |
| 文件系統寫入/讀取 | 絕對路徑或相對工作目錄 | new File("img/01.jpg") 相對啟動目錄 |
src/main/resources 下文件編譯進 target/classes,**打包進 JAR** 時只能用 ClassLoader.getResourceAsStream,**不能用 File**。src/main/webapp/images,JSP 用 ${pageContext.request.contextPath}/images/xxx.png。System.getProperty("user.dir") 或 Spring ResourceLoader 獲取動態路徑。@Autowired ResourceLoader loader;
public String readImgBase64(String path) throws IOException {
Resource res = loader.getResource("classpath:" + path); // e.g. "img/01.jpg"
try (InputStream is = res.getInputStream()) {
return Base64.getEncoder().encodeToString(is.readAllBytes());
}
}
分清「Web 路徑」「Classpath 資源」「文件系統路徑」三種語境,引用圖片不再迷路。