所以我正在處理從資料庫(MYSQL)中挑選資料的網頁

影像 URL 欄位具有存盤在服務器上的檔案(JPG、PNG、PDF 等)的位置。
我試圖將 base 64 資料作為模型發送回前端(角度)
cmPost.Model
private id;
private postType;
private title;
private description;
private String category;
private String location;
private String eventStart;
private String eventEnd;
private String imageUrl;
private String department;
private Integer semester;
private String options;
private String settings;
private String college;
private Integer anonyomus;
private Integer status;
private String timestamp;
private String uploadBy;
上傳助手.java
public List<cmPost> getUploadList(String email) throws IOException {
List<cmPost> editBeforeSend = postRepo.getUploads(email);
for (var i = 0; i < editBeforeSend.size(); i ) {
System.out.println(editBeforeSend.get(i).getPostType());
if(editBeforeSend.get(i).getPostType().toString().equalsIgnoreCase("NA")) {
String path = "uploads/events/" editBeforeSend.get(i).getImageUrl();
String ext = FilenameUtils.getExtension(path);
String encoded = Base64.getEncoder().encodeToString(Files.readAllBytes(Path.of(path)));
editBeforeSend.get(i).setImageUrl("data:image/" ext ";base64," encoded);
}else if(editBeforeSend.get(i).getPostType().toString().equalsIgnoreCase("Papers") || editBeforeSend.get(i).getPostType().toString().equalsIgnoreCase("Projects")){
String path = "uploads/notes/" editBeforeSend.get(i).getImageUrl();
String ext = FilenameUtils.getExtension(path);
String encoded = Base64.getEncoder().encodeToString(Files.readAllBytes(Path.of(path)));
editBeforeSend.get(i).setImageUrl("data:image/" ext ";base64," encoded);
}
}
return editBeforeSend;
}
上傳控制器.java
@GetMapping("api/v1/upload/getPostList")
public ResponseEntity<?> getPollsList(@RequestParam String email) throws IOException {
List<cmPost> pollData = uploadHelper.getUploadList(email);
return new ResponseEntity<>(pollData, HttpStatus.OK);
}
但是我得到 431 標題到大錯誤,在郵遞員上正常作業,但不是從前端角度,任何人都可以指出一種更好和有效的方法來做到這一點。因為我將有很多影像檔案,我需要發送到頁面加載的前端。
在我的代碼中犯了一些錯誤已修復它現在可以正常作業
我現在的問題是這是最好的方法嗎?
場景:如果我的資料庫中有 1000 個帶有影像路徑的列,每個影像都將轉換為 BASE64 并發送,那么最好和有效的方法是什么
任何指導都會非常有幫助
提前致謝。
uj5u.com熱心網友回復:
我不是 Angular 方面的專家,但你可以像這樣重寫你的 API:
- 發送到您的 API 的 Angular http URL,例如:
http://localhost/api/images/ID/POST_TYPE - 有一個回傳影像的 API(例如:)
@GetMapping("/api/images/{id}/{postType}"),它將執行資料庫查詢。影像將作為二進制內容(不是 base64)回傳。(見下文)
您還可以發送快取資訊,以便瀏覽器不會再次下載影像。
對于影像 API,我沒有看到您直接使用檔案系統中的影像。您可能可以簡單地將 之后的部分映射/app/images到存盤它們的路徑。
- 向 Angular 發送 URI:/api/images/uploads/events/WHATEVER
- 在 /api/images 之后閱讀 URI(我也不是 Spring MVC 專家,我不知道變數是否可以匹配整個路徑)
- 使用此 URI 獲取實際檔案
- 使用
Files.copy(yourPath, request.getOutputStream())do 執行實際的復制。
注意:出于各種安全原因
- 您還應該檢查 - 特別是如果您使用外部路徑 - 路徑是否有效地位于您想要的位置。
- 您還應該檢查 - 給定影像是個人資料 - 用戶確實可以訪問它。這是 GRPD 給定的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419981.html
標籤:
