精!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)
江山如画的头像江山如画管理团队
精!HTML5调用手机拍照实现图片上传服务器,并将图片地址存进数据库(上)
上一篇 2022年8月11日 上午9:48
吴晓波干货分享:网站内容和知识如何盈利
下一篇 2022年8月12日 上午10:33

99%的人还看了以下文章

  • 网络编程 ASP.NET(C#)学习笔记三:数据类型-引用类型

    C#中数据类型主要分为两大类:值类型和引用类型。本节课主要讲解引用类型的分类及C#内置引用类型object 和string。 引用类型包括:类(class、object、string)、接口(interface)、数组(array)、代理(delegate)类包括:用户自定义的类、object基类、字符串类,其中object 、string为C#内置引用类型…

    2018年1月30日
    8.4K0
  • Tkinter(Python GUI编程)从入门到精通(一)

    什么是Tkinter 一个 GUI 程序一般由窗口、下拉菜单或者对话框等图形化组件构成, 通过鼠标点击菜单栏、按钮或者弹出对话框的形式来实现人机互动,从而提升人机交互的体验,让“冰冷”的程序变得有“温度”。 注意:GUI 这一概念并非 Python 语言独有,它属于计算机科学技术领域中的一个概念,比如使用 C/C++ 语言开发的 Qt、GTK、Electro…

    2022年8月20日
    6.4K0
  • 新闻管理系统数据库设计

    新闻管理系统数据库,包含用户表、新闻评论表、管理员表、栏目表、新闻表、评论表、关键字表 每个表的数据字段,数据类型,是否为空,描述,见下表:

    2020年4月11日
    11.7K0
  • 第四章 数据库应用开发案例1

    理解JDBC以及Java程序与数据库的交互原理
    掌握JDBC API中提供的常用接口和类
    掌握JDBC连接数据库方法
    掌握数据库的CRUD操作
    掌握数据源与连接池技术

    2018年2月7日
    8.9K2
  • 分享一个非常实用的连接数据库javabean

    连接mysql数据库的javabean,修改url数据库连接字符串和驱动程序加载代码,即可成为通用的数据库连接BEAN。 package com.common; import java.sql.*; public class DataBaseConn { public  Connection conn = null; public void createCo…

    2020年12月6日
    8.0K0
  • js中var a=b=1和var a=1,b=1的区别

    js中一次性定义多个变量的时候,可以用:var a=1,b=1这种中间用逗号隔开的方式,但有些时候为了省事,直接定义var a=b=1。 那这两种写法方式最后效果是一样的吗?有没有什么区别呢?请大家看下面的范例: 1、用var a=b=1的方式 由上图可以明显看出来,变量b的作用域已经是全局的了,因为在函数外可以调用到(可以正常的输出变量)。 2、用var …

    2022年3月19日
    5.6K0

发表回复

登录后才能评论