HTML5+Canvas调用手机拍照功能实现图片上传(下)


Posted in Javascript onApril 21, 2017

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

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

ok,废话不多说了,直接贴代码吧。

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~"); 
        } 
      });

2、后台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+jQuery+Canvas调用手机拍照功能实现图片上传的全部实现过程,总感觉自己的思路有些混乱,嗯,慢慢进步吧!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中令人发指的valueOf方法介绍
Feb 22 Javascript
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
JS处理一些简单计算题
Feb 24 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 Javascript
浅谈js闭包理解
Apr 01 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 28 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 #Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 #Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 #Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 #jQuery
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
Apr 21 #Javascript
H5图片压缩与上传实例
Apr 21 #Javascript
H5手机端多文件上传预览插件
Apr 21 #Javascript
You might like
PHP clearstatcache()函数详解
2010/03/02 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
python list排序的两种方法及实例讲解
2017/03/20 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
python求最大值最小值方法总结
2019/06/25 Python
Django实现跨域请求过程详解
2019/07/25 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
Python多进程编程常用方法解析
2020/03/26 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
2014年感恩母亲演讲稿
2014/05/27 职场文书
留守儿童工作方案
2014/06/02 职场文书
电工实训报告总结
2014/11/05 职场文书
2014年文员工作总结
2014/11/18 职场文书
研究生个人学年总结
2015/02/14 职场文书
摩登时代观后感
2015/06/03 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电