zoukankan      html  css  js  c++  java
  • java-前端传base64,后台转成文件并存储

    需求:单独的H5页面实现手绘签名,然后上传服务器,并修改数据,首先项目中是扫码跳转到H5页面,那链接中需要带参数,怎么截取参数?下面是截取路径,获得值

    var varurl = window.location.search; //获取url中"?"符后的字串
                    if (varurl.indexOf("?") != -1) { //判断是否有参数
                        varstr = varurl.substr(1); //从第一个字符开始 因为第0个是?号 获取所有除问号的所有符串
                        var strs = varstr.split("="); //用等号进行分隔 (因为知道只有一个参数 所以直接用等号进分隔 如果有多个参数 要用&号分隔 再用等号进行分隔)
                        console.log(strs[1]); //直接弹出第一个参数 (如果有多个参数 还要进行循环的)
                        id = strs[1];
                    }

    接下来就是后台接受字节码并转换成文件上传了:

    @RequestMapping(value = "/uploadBase64", method = {RequestMethod.POST})
        @ResponseBody
        public Object uploadBase64(HttpServletRequest request, HttpServletResponse response) throws Exception {
            String base64String = request.getParameter("signatureBase64");
            if (StringUtils.isBlank(base64String)) {
                return new JsonResult(false, "上传失败", "");
            }
            logger.info("======开始上传图片======");
            String imgUrl = "";
            String msg = "";
            Boolean result = false;
            MultipartFile file = Base64DecodMultipartFileUtil.base64ToMultipart(base64String);
            if (Objects.nonNull(file)) {
                try {
                    String path = getCompleteImgPath(request, file);
                    imgUrl = path.replace("\", "/");
                    result = true;
                    msg = SysCode.SUCCESS.getDesc();
                    logger.info("======图片上传成功,路径======" + path.replace("\", "/"));
                } catch (Exception e) {
                    logger.error("图片上传失败:" + e.getMessage(), e);
                    e.printStackTrace();
                    msg = "上传失败!";
                }
            } else {
                logger.error("图片上传失败");
            }
            logger.info("======图片上传结束======");
            return new JsonResult(result, msg, imgUrl);
    
        }

    //base64转文件
    public static MultipartFile base64ToMultipart(String base64) {
    try {
    String[] baseStrs = base64.split(",");
    BASE64Decoder decoder = new BASE64Decoder();
    byte[] b = new byte[0];
    b = decoder.decodeBuffer(baseStrs[1]);
    for (int i = 0; i < b.length; ++i) {
    if (b[i] < 0) {
    b[i] += 256;
    }
    }
    return new Base64DecodMultipartFileUtil(b, baseStrs[0]);
    } catch (IOException e) {
    e.printStackTrace();
    return null;
    }
    }
    //获取文件路径
    public static String getCompleteFilePath(HttpServletRequest request, MultipartFile uploadFile) throws Exception {
    String logoPathDir = SysConstants.TOMCAT_FILE_URL;
    /**
    * 得到文件保存目录的真实路径
    */
    String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);
    /**
    * 根据真实路径创建目录
    */
    File logoSaveFile = new File(logoRealPathDir);
    if (!logoSaveFile.exists()) {
    logoSaveFile.mkdirs();
    }
    /**
    * 获取文件的后缀
    */
    System.out.println(uploadFile.getOriginalFilename());
    String suffix = uploadFile.getOriginalFilename().substring(uploadFile.getOriginalFilename().lastIndexOf("."));
    /**
    * 使用UUID生成文件名称
    */
    String imageName = RandomUtil.getUuid() + suffix;// 构建文件名称
    /**
    * 拼成完整的文件保存路径加文件
    */
    String fileName = logoRealPathDir + File.separator + imageName;
    File file = new File(fileName);
    uploadFile.transferTo(file);

    FileChannel in = null;
    FileChannel out = null;
    FileInputStream inStream = null;
    FileOutputStream outStream = null;
    try {
    inStream = new FileInputStream(file);
    outStream = new FileOutputStream(PathUtil.getImgBasePath() + File.separator + imageName);
    in = inStream.getChannel();
    out = outStream.getChannel();
    in.transferTo(0, in.size(), out);
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    inStream.close();
    in.close();
    outStream.close();
    out.close();
    }
    return PathUtil.getImgPath(imageName);
    }
     
  • 相关阅读:
    SpringMVC 使用JSR-303进行校验 @Valid
    Hibernate Tools生成注释
    大型网站架构演变和知识体系(转载)
    eclipse从数据库逆向生成Hibernate实体类
    性能测试公众号,欢迎你的加入~
    mysql使用druid监控配置
    (转)面试为什么需要了解JVM
    (转)什么是缓存击穿?
    Mysql推荐使用规范(转)
    java应用监控工具
  • 原文地址:https://www.cnblogs.com/ly-gaoshuaige/p/13714573.html
Copyright © 2011-2022 走看看