檔案上傳是 Web 開發中最常見的一個應用場景。一般在處理資料時,會有兩種常見的方案:直接把檔案流放在記憶體裡,或者把檔案流先緩衝到磁碟。
1、如果是高頻且檔案極小
使用純記憶體模式,預設即可。如果高頻小檔案,是不適合用“臨時檔案模式”的,磁碟可能容易刷壞。只能多配些記憶體!
2、如果是低頻或者檔案很大
建議使用“臨時檔案模式”。即上傳的資料流,先快取為臨時檔案(落盤),再以本地檔案流形式提供使用。這個非常省記憶體。比如,上傳 1GB 的檔案,服務記憶體幾乎不會上升。
- 新增配置
使用臨時檔案需要透過配置開啟
server.request.useTempfile: true #預設 false
- 用後主動刪除(建議,不管有沒有用“臨時檔案模式”都主動刪除)
使用完後,注意要刪掉
@Controller
public class DemoController{
@Post
@Mapping("/upload")
public void upload(UploadedFile file) {
try{
file.transferTo(new File("/demo/user/logo.jpg"));
} finally {
file.delete();
}
}
}