精!HTML5调用手机拍照实现图片上传服务器,并将图片地址存进数据库(下)

这篇文章主要为大家详细介绍如何使用HTML5利用摄像头拍照实现上传功能。

上一篇只讲到前台操作,这篇专门涉及到Java后台处理,前台通过Ajax提交将Base64编码过的图片数据信息传到Java后台,然后Java这边进行接收处理,通过对图片数据信息进行Base64解码,之后使用流将图片数据信息上传至服务器进行保存,并且将图片的路径地址存进数据库。

大家可以点此链接查看前台本地压缩上传的处理:

精!HTML5调用手机拍照实现图片上传服务器,并将图片地址存进数据库(上)

1、前台js代码

$.ajax({ 

        async:false,//是否异步 

        cache:false,//是否使用缓存 

        type: "POST", 

        data:{fileData:fileData,licenceName:licenceName,cust_tax_code:cust_tax_code,phoneNum:phoneNum,state_id:state_id}, 

        dataType: "json", 

        timeout: 1000, 

        contentType : 'application/x-www-form-urlencoded; charset=utf-8', 

        url: $('#ctx').val()+"CustomerCheckServlet?action=uploadLicence", 

        success: function(result){ 

          console.log(result); 

          if(result == true){ 

            alert('Success Upload~~~'); 

          }else if(result == false){ 

            alert('Error Upload~~~'); 

          } 

        }, 

        error: function(){ 

          alert("Error Linking~"); 

        } 

      });

后台Java代码

/** 

   * 证件上传 

   * @param request 

   * @param response 

   * @throws IOException 

   */

  public void uploadLicence(HttpServletRequest request,HttpServletResponse response) throws IOException{ 

    log.info("=====================uploadLicence"); 

    df = new SimpleDateFormat("yyyy-MM-dd"); 

      

    String cust_tax_code = request.getParameter("cust_tax_code"); 

    String phoneNum = request.getParameter("phoneNum"); 

    String licenceName = request.getParameter("licenceName"); 

      

    String fileData = request.getParameter("fileData");//Base64编码过的图片数据信息,对字节数组字符串进行Base64解码 

    String imgPath = uploadFile(fileData,liceneName);//进行文件上传操作,上传到服务器中存放(这里是上传到服务器项目文件夹中存到) 

      

    boolean result = false;//最终上传成功与否的标志 

      

    custCheckInfo = new CustomerCheckInfo(); 

    custCheckInfo.setCust_tax_code(cust_tax_code); 

    custCheckInfo.setPhonenum(phoneNum); 

    custCheckInfo.setUpdate_time(df.format(new Date())); 

      

    boolean save_flag = customerService.saveRegistCertInfo(custCheckInfo);//保存路径 

      

    //判断数据库中的路径是否存在,并且文件夹中的文件是否存在(判断是否上传成功的标志) 

    boolean is_success = isSuccessUpload(licenceName, cust_tax_code, phoneNum); 

    if(save_flag && is_success){ 

      result = true; 

    } 

      

    //如果证件上传成功,则记录到记录表中 

    if(result){ 

      StateRecordInfo record = new StateRecordInfo(); 

      record.setCust_tax_code(cust_tax_code); 

      record.setPhonenum(phoneNum); 

      record.setState_id(state_id); 

        

      saveStateRecord(record);//执行状态保存操作 

    } 

      

    System.out.println("===result:"+result); 

    PrintWriter pw = response.getWriter(); 

    pw.print(result); 

    pw.close(); 

  }
/** 

   * 文件上传 

   * @param fileData 

   * @param fileName 

   * @return 

   */

  public String uploadFile(String fileData,String fileName){ 

    //在自己的项目中构造出一个用于存放用户照片的文件夹 

    String imgPath = this.getServletContext().getRealPath("/uploads/"); 

    //如果此文件夹不存在则创建一个 

    File f = new File(imgPath); 

    if(!f.exists()){ 

      f.mkdir(); 

    } 

    //拼接文件名称,不存在就创建 

    imgPath = imgPath + "/" + fileName + ".jpg"; 

    f = new File(imgPath); 

    if(!f.exists()){ 

      f.mkdir(); 

    } 

      

    log.info("====文件保存的位置:"+imgPath); 

      

    //使用BASE64对图片文件数据进行解码操作 

    BASE64Decoder decoder = new BASE64Decoder(); 

    try { 

      //通过Base64解密,将图片数据解密成字节数组 

      byte[] bytes = decoder.decodeBuffer(fileData); 

      //构造字节数组输入流 

      ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 

      //读取输入流的数据 

      BufferedImage bi = ImageIO.read(bais); 

      //将数据信息写进图片文件中 

      ImageIO.write(bi, "jpg", f);// 不管输出什么格式图片,此处不需改动 

      bais.close(); 

    } catch (IOException e) { 

      log.error("e:{}",e); 

    } 

    return imgPath; 

  }
/** 

   * 判断是否成功上传 

   * @return 

   */

  public boolean isSuccessUpload(String licenceName,String cust_tax_code,String phonenum){ 

    boolean flag = false; 

    String licencePath = "";//证件图片上传成功之后保存的路径 

    custCheckInfo = customerService.getCustomerCheckInfo(cust_tax_code, phonenum); 

    licencePath = custCheckInfo.getTax_regist_cert(); 

    

    //判断证件路径不为空并且在上传存放的文件夹中存在,就表明以上传成功 

    File f = new File(licencePath); 

    if(licencePath.length() >0 && f.exists()){ 

      flag = true; 

    } 

    return flag; 

  }

以上就HTML5调用手机拍照实现图片上传服务器,并将图片地址存进数据库的详细内容,更多请关注125网页设计的其它相关文章!

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/10955.html

(0)
江山如画的头像江山如画管理团队
上一篇 2022年8月11日 上午9:48
下一篇 2022年8月12日 上午10:33

99%的人还看了以下文章

  • 一文让你快速理解欠拟合和过拟合,以及解决欠拟合和过拟合的方法?(精)

    前面分享过《深度学习中的激活函数、防止过拟合的方法》、《最清楚的过拟合(Overfitting)、欠拟合讲解》,今天给125建站网再给大家梳理一下,让你快速理解欠拟合和过拟合,以及解决欠拟合和过拟合的方法? 欠拟合与过拟合 欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况; 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就大不如意了,即模型的泛…

    2023年1月16日
    3.5K0
  • python turtle绘画0基础练习

    一、题目:导入turtle包(import turtle),绘制边长为100的正方形。 要求: 1、新建一个“turtle2.py”文件 2、编写程序。 3、调试程序。 4、排除错误。 二、导入turtle包(import turtle),绘制半径为40的圆(circle)。 三、题目:导入turtle包(import turtle),绘制边长为60的等边三…

    2023年6月15日
    9.4K0
  • Ubantu为应用程序添加桌面图标

    按要求配置应用程序参数,为应用程序添加桌面图标,实现系统快捷启动。 Ubuntu桌面的左边(默认在左边)有一个启动器,类似于window的任务栏。在Ubuntu18中叫dock(船坞),有时候又叫收藏夹。本文统一叫做启动器 在使用 Ubuntu 操作系统进行开发过程中,由于Ubuntu 系统其操作方式主要通过命令行终端进行交互,故启动软件也一般通过终端键入应…

    2022年9月1日 编程开发
    7.1K0
  • Pycharm django 项目下如何创建一个APP

    ‌打开PyCharm并加载你的Django项目‌: 确保你已经安装并打开了PyCharm,并且你的Django项目已经加载在PyCharm中。 ‌打开终端‌: 在PyCharm中,你可以通过点击底部工具栏中的“Terminal”按钮来打开终端。 ‌导航到你的Django项目目录‌: 在终端中,使用cd命令导航到你的Django项目的根目录。例如,如果你的项目…

    2024年12月2日
    9070
  • 如何设计单元测试用例,单元测试快速入门教程四

    测试人员在实际工作中根据不同覆盖要求设计面向代码的单元测试用例,运行测试用例后至少应实现如下覆盖需求: 对程序模块的所有独立的执行路径至少覆盖一次; 对所有的逻辑判定,真假两种情况至少覆盖一次; 在循环的边界和运行界限内执行循环体; 测试内部数据结构的有效性等。 至少应设计覆盖如下需求的基于功能的单元测试用例: 测试程序单元的功能是否实现; 测试程序单元性能…

    2018年4月18日
    4.7K0
  • JS截取字符串方法详解:前面/中间/后面

    JS截取字符串方法,JS的match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 js截取字符串中间的内容 var str = “aaabbbcccdddeeefff”; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee js截取某个字符串前面的内容 var…

    2023年1月5日
    7.6K0

发表回复

登录后才能评论