在如今的 Web 套用開發中,檔的上傳是一個常見的需求。使用者上傳頭像、檔等,需要一個穩定且易於使用的檔處理機制。雖然如今各種雲廠商提供了物件儲存服務,但是對於我們初學者來說,還是想要一種無需成本的本地檔儲存方法。
今天,我們就來深入了解如何在 SpringBoot 中實作本地檔儲存功能。範例程式碼如下:
import org.springframework.core.io.Resource;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.logging.Logger;
@RestController
public classFileUploadController {
privatestaticfinalLoggerlog = Logger.getLogger(FileUploadController. class.getName());
privatestaticfinalPathUPLOAD_DIR = Paths.get("uploads"); // 設定檔上傳的目錄
@PostMapping("/upload")
public ResponseEntity<Result<String>> uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body(Result.error("檔為空,上傳失敗"));
}
try {
// 獲取檔名
StringfileName = file.getOriginalFilename();
// 確保上傳目錄存在
Files.createDirectories(UPLOAD_DIR);
// 保存檔到伺服器的指定目錄
PathtargetLocation = UPLOAD_DIR.resolve(fileName);
Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
// 返回成功的響應
return ResponseEntity.ok(Result.success("檔上傳成功,檔名:" + fileName));
} catch (IOException e) {
log.severe("檔上傳失敗:" + e.getMessage());
return ResponseEntity.status(500).body(Result.error("檔上傳失敗,伺服器內部錯誤"));
}
}
}
今天的檔上傳功能是建立在定義一個 Result 類上,如果你想完整實作檔上傳功能,可以參考之前我們分享的 SpringBoot 建立統一結果返回類。可以點選下方文字,直接跳轉原文哦!
今天的程式碼大賞就到這裏了。希望透過這篇文章,你能夠對在 SpringBoot 中實作本地檔儲存功能有一個更深入的理解。
完整程式碼片段來源於程式碼小抄,歡迎點選進入小程式閱讀!
線上存取:https://www.codecopy.cn/post/wmlc1f
在程式碼小抄可以看到更多優質程式碼,也歡迎大家積極分享,可能會獲得我們官方的小禮品 🎁~
往期推薦