将前端传过来的base64加密图片保存到本地,并且判断来自于哪个终端

文章目录

  • 代码
  • 测试结果

代码

@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

将前端传过来的base64加密图片保存到本地,并且判断来自于哪个终端_第1张图片
如果这个dataurl不可用,可以自己前端页面截取过来使用
将前端传过来的base64加密图片保存到本地,并且判断来自于哪个终端_第2张图片测试好,返回数据没问题,去到响应的盘符下查看文件是否保存了
在这里插入图片描述

我这里是保存了一个8位随机数的
如果保存的图片多可以采取时间搓+随机数+一些用户id什么的,这样就不会有覆盖问题了
还有个问题要要补充一下:
这个是做测试用的,实际用加入一个HttpServletRequest request对象接收前端发来的请求
里面会带请求的参数useragent和dataurl,数据返回可以是告诉用户保存成功,后端看到的是来自哪个终端
ps:判断,前端和后端都可以写

你可能感兴趣的:(工具和小收获,java,经验分享)