Skip to content

文件( 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);
}