• Java后台获取Html5拍照的照片并下载的实例方法


      

    Html5目前渐渐的应用越来越广泛。它已经成为技术的一种主流。在国内的一些云平台,一些新的拍照技术上,也都运用了html5.我的这个实例是我们公司在云平台上用到的html5拍照并下载。

        这里前台html5怎么捕捉传数据的就不提了。后台接收,其实也比较简单,通过获取到前台传递的payload的形式的数据,看下面代码:

    View Code
    1 String cameraPhoto=String.valueOf(request.getParameter("data"));    //获取前台页面传过来的Base64加密的数据
    2                 String    saveFileNames=String.valueOf(request.getParameter("filename"));    //获取前台页面图片的名称
    3                 cameraPhoto=fileCommon.DelFormat(cameraPhoto);    //消除换行和空格
    4                 SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss"); //格式化当前系统
    5                 dateTime = dateFm.format(new java.util.Date()); //当前时间
    6                 picName=dateTime+saveFileNames;                          //现在图片的名称
    7                 urls = pros.getProperty("uploadUrl_uri")+ "savefile"+ File.separator+picName;    //最新的路径名称
    8                 long result=fileCommon.GenerateImage(cameraPhoto, urls);    //把数据转换成为图片

                      其实后台处理很简单,html5捕捉的图片,只是一组经过Base64加密过的数据,主要是看你怎么接收,接收时根据http协议的里面http正文的关键字(用谷歌浏览器控制台可以查看到),接收以后,解密,然后再把数据转换为图片就ok了。

    具体转换过程,看下面代码:

     

    View Code
     1 public class FileCommon {
     2     
     3     /*******************将图片转化为字符串***********************************/
     4     public static String GetImageStr(String imgFilePath) {
     5           // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
     6           byte[] data = null;
     7           // 读取图片字节数组
     8           try {
     9            InputStream in = new FileInputStream(imgFilePath);
    10            data = new byte[in.available()];
    11            in.read(data);
    12            in.close();
    13           } catch (IOException e) {
    14            e.printStackTrace();
    15           }
    16           // 对字节数组Base64编码
    17           BASE64Encoder encoder = new BASE64Encoder();
    18           return encoder.encode(data);// 返回Base64编码过的字节数组字符串
    19          }
    20         /***********************将字符串转化为图片***********************************************/
    21          public static long GenerateImage(String imgStr, String imgFilePath) {// 对字节数组字符串进行Base64解码并生成图片
    22           if (imgStr == null)
    23            // 图像数据为空
    24            return 0;
    25           BASE64Decoder decoder = new BASE64Decoder();
    26           try {
    27            // Base64解码
    28            byte[] bytes = decoder.decodeBuffer(imgStr);
    29            for (int i = 0; i < bytes.length; ++i) {
    30             if (bytes[i] < 0) {// 调整异常数据
    31                 bytes[i] += 256;
    32             }
    33            }
    34            // 生成jpeg图片
    35            OutputStream out = new FileOutputStream(imgFilePath);
    36            out.write(bytes);
    37            out.flush();
    38            out.close();
    39            return bytes.length;
    40           } catch (Exception e) {
    41               return 0;
    42           }
    43          }
    44     
    45     /********************字符串格式化,取消空格和换行******************************/
    46     public static String DelFormat(String param){
    47         Pattern p = Pattern.compile("\\s*|\t|\r|\n"); 
    48         Matcher ms = p.matcher(param); 
    49         param = ms.replaceAll("");
    50         String temps = "";
    51         // 把可能存在的换行剔除
    52         StringReader srs = new StringReader(param);
    53         BufferedReader brs = new BufferedReader(srs);
    54         String lines = null;
    55         try {
    56             while ((lines = brs.readLine()) != null) {
    57                 temps += lines;
    58             }
    59         } catch (IOException e1) {
    60             // TODO Auto-generated catch block
    61             e1.printStackTrace();
    62         }
    63         temps=temps.replace("\r\n", "\\r\\n");
    64         //去除换行和空格
    65         return temps;
    66     }
    67     /**
    68      * 获取当前时间的字符串
    69      * @return “yyyyMMddHHmmss”
    70      */
    71     public static String getTimeNow() {
    72         Date date = new Date();
    73         DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    74         String str = dateFormat.format(date);
    75         return str;
    76     } 
    77 
    78 }

      

    经过以上处理,就可以成功的把照片存放到你要存放的位置了。

  • 相关阅读:
    (三)xpath爬取4K高清美女壁纸
    聚焦爬虫:数据解析
    (二)requests-爬取国家药监局生产许可证数据
    (一)requests-实战小练习
    requests模块
    spring+apache dbcp +oracle 连接池配置以及优化
    IntelliJ IDEA 注释模版 输入/**后 不显示配置好的模板
    oracle 隔离级别、事务怎么开始的以及如何查看数据库采用字符集
    java 日期处理相关
    Oracle 插入数据时获取系统时间
  • 原文地址:https://www.cnblogs.com/shunxiyuan/p/2803378.html
Copyright © 2020-2023  润新知