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 相关文章推荐
window.js 主要包含了页面的一些操作
Dec 23 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
javascript打印html内容功能的方法示例
Nov 28 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
jQuery Easyui实现左右布局
Jan 26 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
js时间戳和c#时间戳互转方法(推荐)
Feb 15 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
vue.js做一个简单的编辑菜谱功能
May 08 Javascript
react-native android状态栏的实现
Jun 15 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
Aug 08 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与已存在的Java应用程序集成
2006/10/09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
Javascript 二维数组
2009/11/26 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python中的包和模块实例
2014/11/22 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
汉语专业毕业生自荐信
2014/07/06 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
医药销售自我评价200字
2014/09/11 职场文书
项目合作协议书
2014/09/23 职场文书
教师个人事迹材料
2014/12/17 职场文书
工程部主管岗位职责
2015/02/12 职场文书
雾霾停课通知
2015/04/24 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
python编写五子棋游戏
2021/05/25 Python
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript