java spring接收前端传输的图片(两种方法)

spring接收前端传输的图片

1.以base64格式来传输

以PostMapping的

@RequestBody JSONObject jsonObject

作为参数接收前端传来的base64编码(因为采用get会抛出请求头过长的异常)

String base64Data=jsonObject.getString("base64Data");

接收前端传来的编码

解码主体

//base64格式前头
String dataPrix = "";
//实体部分数据
String data = "";
if(base64Data==null||"".equals(base64Data)){
     
    return "上传失败,上传图片数据为空";
}else {
     
    //将字符串分成数组
    String [] d = base64Data.split("base64,");
        dataPrix = d[0];
        data = d[1];
}
String suffix = "";
//data:image/jpeg;base64,base64编码的jpeg图片数据
if("data:image/jpeg;".equalsIgnoreCase(dataPrix)){
     
    suffix = ".jpg";
}else if("data:image/x-icon;".equalsIgnoreCase(dataPrix)){
     
    //data:image/x-icon;base64,base64编码的icon图片数据
    suffix = ".ico";
}else if("data:image/gif;".equalsIgnoreCase(dataPrix)){
     
    //data:image/gif;base64,base64编码的gif图片数据
    suffix = ".gif";
}else if("data:image/png;".equalsIgnoreCase(dataPrix)){
     
    //data:image/png;base64,base64编码的png图片数据
    suffix = ".png";
}else {
     
    return "上传图片格式不合法";
}
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    String tempFileName=uuid+suffix;
    String imgFilePath = "E:\\if\\try\\"+tempFileName;
    try {
     
        //Base64解码
        byte[] base64decodedBytes = Base64.getDecoder().decode(data);
        OutputStream out = new FileOutputStream(imgFilePath);
        out.write(base64decodedBytes);
        out.flush();
        out.close();
    } catch (Exception e) {
     
        System.out.println(e);
        return "上传图片失败";
    }

编码主体


//编码
            InputStream inputStream = null;
            byte[] data = null;
            try {
     
                inputStream = new FileInputStream("E:\\if\\2.jpg");
                data = new byte[inputStream.available()];
                inputStream.read(data);
                inputStream.close();
            } catch (IOException e) {
     
                e.printStackTrace();
            }
            Encoder encoder = Base64.getEncoder();
            String base64encodedString = encoder.encodeToString(data);
            System.out.println(base64encodedString);

删除文件

File delFile = new File(path);
System.out.println("File->"+delFile);
if(delFile.isFile() && delFile.exists()) {
     
    System.out.println("delete");
    delFile.delete();
}

2. MultipartFile 保存图片

接口中接收MultipartFile image

@PostMapping("/upload")
    public Map<String, Object> upload(MultipartFile image) throws IOException

然后保存图片

String imgName = UUID.randomUUID().toString().replace("_", "") + "_" + image.getOriginalFilename().replaceAll(" ", "");
//保存图片
            String imgFilePath=你的文件夹路径+imgName;
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(image.getBytes());
            out.flush();
            out.close();

保存图片的功能可以参考一下我写的Thumbnails图片压缩
每次上传图片到服务器的时候,都会由于图片过大导致加载很长时间,然后使用图片压缩可以稍微减轻一点图片处理的压力

用图片压缩后,不仅节省上传和回显时间,同时也可以减轻一点服务器的压力

你可能感兴趣的:(java,springboot,java,base64,spring)