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

  • 已知列表[1,2,3,4,5],让列表的每个元素加1,把结果不能被2整除的元素筛选出来

    list1=[1,2,3,4,5] func=lambda x:x+1 r=map(func,list1) def odd(n): return n%2!=0 result=filter(odd,list(r)) list(result) 知识点一:Python map() 函数 map() 会根据提供的函数对指定序列做映射。 第一个参数 function …

    2022年7月18日
    1.7K0
  • 第一个Tkinter程序

    Tkinter(Python GUI编程)从入门到精通(一) 上一篇文章介绍什么是Tkinter?tkinter的优缺点,tkinter的开发工具。 今天我们在上一篇的基础上,开始给主窗口添加文本、按钮,并给按钮绑定一个事件,点击按钮弹出一个消息窗口。 创建label label=tk.Label(root,text=”hello GUI&#82…

    2022年8月25日
    3.6K0
  • Python数据分析及可视化,科学计算练习题

    第一章 单元测试 1、 问题:数据分析是指通过分析手段、方法和技巧对准备好的数据进行探索、分析,从中发现因果关系、内部联系和业务规则,为商业提供决策参考。( )选项:A:对B:错答案: 【对】 2、 问题:Anaconda中包含了conda、Python在内的超过18个科学包及其依赖项。( )选项:A:对B:错答案: 【对】 3、 问题:数据分析是一个有目的…

    2022年1月29日
    28.8K1
  • 人工智能基础测试

    1、 print(“Hi”) print(“3*6”) 程序输出结果:(5分) A、 Hi 18 B、 Hi 3*6 C、 Hi 3*6 D、 Hi 18 2、人工智能的概念最早是由哪一位科学家提出来的()(5分) A、 麦卡锡 B、 图灵 C、 冯·诺依曼 D、 马明斯基 3、下列关于人工智能的叙述不正确的有…

    2023年6月2日
    8.9K0
  • object…object和object[]…object的区别

    object…object public int update(String sql, Object… params) throws SQLException { Connection conn = this.prepareConnection(); return this.update(conn, true, sql, params); }…

    2019年11月19日
    14.0K0
  • python 递归函数使用示例,求两个整数的最大公约数(欧几里得算法)

    用于计算两个整数的最大公约数的递归算法称为欧几里得算法,其计算原理依赖于定理: 两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。 公式为:gcd(a,b)=gcd(b, a mod b) 递归函数使用示例, def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) prin…

    2020年1月31日
    11.0K0

发表回复

登录后才能评论