文件( Base64 to BLOB入库出库)
BLOB入库是直接将上传的文件存入数据库的字段中。
Base64 文件字符串
json
{
data: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABA......"
}Model模型
java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Images {
String url; //前端请求路径 /api/image....
String name;//文件名称 I00 + syst.currentTimeMillis() + 0001
String mime;//文件类型 image/jpeg
byte[] data;//二进制文件
}控制器
java
@PutMapping("/image/upload")
ResponseEntity testP(@RequestBody Map<String,String> data){
try {
//获取Base64字符串
String base64data = data.get("data");
//用时间戳重命名
String name = "I001" + System.currentTimeMillis() + "0001";
//截取Base64 文件字符串的类型
String mini = base64data.substring(5,base64data.indexOf(";"));
//拼接一个前端访问路径
String url = "/api/image/raw/" + name;
//截取Base64字符串文件本体
String bt = base64data.substring(base64data.indexOf(",")+1);
//Base64字符串转byte字节流
byte[] blob = new BASE64Decoder().decodeBuffer(bt);
//保存
Images img = Images.builder().data(blob).mime(mini).name(name).url(url).build();
imagesService.save(img);
//返回前端
return new ResponseEntity<>(img, HttpStatus.CREATED);
}catch (Exception e){
//上传失败
return new ResponseEntity<>("err", HttpStatus.UNPROCESSABLE_ENTITY);
}
}Base64 to BLOB出库(get)
java
@GetMapping("/image/row/{name}")
ResponseEntity testGet(@PathVariable("name") String name) {
//查询图片,不存在则返回404
Images images = imagesService.getOne(Wrappers.query(Images.builder().name(name).build()));
if (images == null) return new ResponseEntity<>("图片不存在", HttpStatus.NOT_FOUND);
//单独取出文件
byte[] byt = images.getData();
//返回解析图片
HttpHeaders headers = new HttpHeaders() {{setContentType(MediaType.IMAGE_JPEG);}};
return new ResponseEntity<>(byt, headers, HttpStatus.OK);
}