精!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%的人还看了以下文章

  • plt.xlabel(‘产品名称’)报错‘str’object is not callable的解决方法

    运行居然报错了… 提示plt.xlabel(‘产品名称’)这一行有错误 报错信息 ‘str’object is not callable plt.xlabel(‘产品名称’)报错‘str’object is not callable的解决方法 重新运行x轴 描述信息终于出来了。 以防下次忘记,还是记录下来了。

    2022年8月13日
    7.4K0
  • 跟永哥学JSP:一个案例三种实现,教你理解Jsp、javabean、Servlet(精)

    很多初学JSP的人,学了JSP页面、javabean技术和Servlet,但并不知道怎么用,什么时候用? 今天我们通过一个求圆面积的实例,分别使用三种方法来实现,深入理解Jsp、javabean、Servlet: jsp页面代码 Javabean Servlet 跟永哥学JSP:一个案例三种实现,教你理解Jsp、javabean、Servlet(精),为12…

    2018年2月22日
    7.7K2
  • 第一章Java Web应用开发技术概述

    1、了解Java Web应用开发技术相关知识
    2、掌握jsp工作原理
    3、掌握开发环境搭建、开发工具的使用。
    4、掌握Java Web开发的基本步骤
    5、学会设计一个简单的网页程序并运行。

    2018年2月1日
    5.6K0
  • python 初学者练手上机实操一

    一、从键盘输入商品名称、商品的单价、商品的数量, 计算商品总价,并按如下格式输出: 商品名称:牛奶,单价:5元,数量:2件,总价:10元 二、从键盘输入年龄,如果>=18岁显示“已成年”,否则显示“未成年”。 三、输入三条边长,如果能构成三角形就计算周长并显示,否则显示“不能构成三角形”。 四、百分制成绩转换为等级制成绩。 要求:如果输入的成绩在90分…

    2023年4月7日
    5.5K0
  • JSP制作后台登录页面:login.jsp

    设计数据库employee,manager表,字段:user_id (主键,自增1,int类型),user_name, password 创建数据源:employee_dsn 制作登录页面login.jsp 登录页面 login.jsp代码: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transition…

    2020年12月6日
    6.6K0
  • 10秒倒计时、考试结束倒计时功能实现代码-JS

    注册成功或登录后网页会有倒计时,如5秒后跳转到哪个页面的功能。 在做一些在线测试,网上考试系统时,会用到倒计时功能。 如网上考试系统里,会有时间提示离考试结束还有多长时间,临近考试结束剩10分钟,还可以弹窗提示考生。 JavaScript实现倒计时功能代码 <!DOCTYPE html> <html> <head> &lt…

    2020年11月1日
    4.6K0

发表回复

登录后才能评论