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图片压缩
每次上传图片到服务器的时候,都会由于图片过大导致加载很长时间,然后使用图片压缩可以稍微减轻一点图片处理的压力
用图片压缩后,不仅节省上传和回显时间,同时也可以减轻一点服务器的压力