代碼:``,`icode` 為 Base64 編碼的圖片二進制字串,長度超過瀏覽器/伺服器 GET 限制 (通常 2KB~8KB),導致後端收不到完整參數。
| 方案 | 適用場景 | 核心做法 |
|---|---|---|
| POST + Ajax 上傳 | 圖片由前端生成/選取,需即時預覽 | `FormData` 發送至後端,後端返回圖片 URL 或 Blob,前端 `URL.createObjectURL` 顯示 |
| 獨立圖片服務 + URL 引用 | 圖片已存儲於檔案系統/物件存儲 (OSS/S3/MinIO) | 後端只存圖片路徑/Key,前端 ` |
| Base64 Data URI (極小圖標) | 極小圖片 (< 2KB),如 favicon、inline icon | ` |
// 前端 Vue 範例
async function uploadAndShow(file) {
const form = new FormData();
form.append('file', file);
const {data: url} = await api.uploadImage(form); // POST /api/image
this.imgUrl = url; // 綁定
}
// 後端 Spring Boot
@PostMapping("/api/image")
public String upload(@RequestParam MultipartFile file) {
String key = ossClient.putObject(bucket, "img/" + UUID.randomUUID(), file.getInputStream());
return cdnDomain + "/" + key;
}
**切勿在 `` 傳遞 Base64 長字串**,這違反 HTTP 語意、破壞快取、阻塞渲染。