代码
@PostMapping(value = "/check")
public Map png2(@RequestParam String path,@RequestParam String useragent) throws IOException {
Map<String, Object> map = new HashMap();
util util = new util();
if (path.equals("")||useragent.equals("")){
map.put("错误","图片url路径或是useragent为空");
return map;
}else{
//获取当前useragent是pc端还是移动端
if (useragent.indexOf("Android") != -1) {
util.png3(path);
map.put("来自安卓手机", "数据已经保存到本地e盘路径");
return map;
} else if (useragent.indexOf("iPhone") != -1 || useragent.indexOf("iPad") != -1) {
util.png3(path);
map.put("来自苹果手机", "数据已经保存到本地e盘路径");
return map;
} else {
// 电脑
util.png3(path);
map.put("来自PC端", "数据已经保存到本地e盘路径");
return map;
}
}
}
工具类两个方法:
1.随机数的,防止图片重名
2.base64解密并且保存图片到本地
//随机数,防止保存图片出现相同
public static Integer randomNumber(Integer num) {
if (num < 11) {
Integer subNum = new Double(Math.pow(10, num - 1)).intValue();
return new Random().nextInt(new Double(Math.pow(10, num)).intValue() - subNum) + subNum;
}
return 0;
}
//将图片保存到本地
public void png3(String path) throws IOException {
//使用substring()方法截取前端传过来的图片url
String result = path.substring(0,path.indexOf(","));
String str2 = path.substring(result.length()+1, path.length());
System.out.println(str2);
//使用BASE64解码获取图片
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = base64Decoder.decodeBuffer(str2);
System.out.println(bytes);
//将解析后的图片保存到e盘根目录下-->调用生成10位随机数方法防止重名+后缀.png
String imgFilePath = "e:\\" + util.randomNumber(8) + ".png";
//将设置好的图片放入输出流写到e盘中
OutputStream out = new FileOutputStream(imgFilePath);
out.write(bytes);
//最后关闭
out.flush();
out.close();
}
这里我保存在e盘下的,你们可以在"e:\"这里修改
测试结果
直接上截图,使用postman测试
提供:
图片的DataURL:
data:image/gif;base64,R0lGODlhMwAxAIAAAAAAAP///
yH5BAAAAAAALAAAAAAzADEAAAK8jI+pBr0PowytzotTtbm/DTqQ6C3hGX
ElcraA9jIr66ozVpM3nseUvYP1UEHF0FUUHkNJxhLZfEJNvol06tzwrgd
LbXsFZYmSMPnHLB+zNJFbq15+SOf50+6rG7lKOjwV1ibGdhHYRVYVJ9Wn
k2HWtLdIWMSH9lfyODZoZTb4xdnpxQSEF9oyOWIqp6gaI9pI1Qo7BijbF
ZkoaAtEeiiLeKn72xM7vMZofJy8zJys2UxsCT3kO229LH1tXAAAOw==
Iphone的useragent
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5
如果这个dataurl不可用,可以自己前端页面截取过来使用
测试好,返回数据没问题,去到响应的盘符下查看文件是否保存了
我这里是保存了一个8位随机数的
如果保存的图片多可以采取时间搓+随机数+一些用户id什么的,这样就不会有覆盖问题了
还有个问题要要补充一下:
这个是做测试用的,实际用加入一个HttpServletRequest request对象接收前端发来的请求
里面会带请求的参数useragent和dataurl,数据返回可以是告诉用户保存成功,后端看到的是来自哪个终端
ps:判断,前端和后端都可以写