Html5目前渐渐的应用越来越广泛。它已经成为技术的一种主流。在国内的一些云平台,一些新的拍照技术上,也都运用了html5.我的这个实例是我们公司在云平台上用到的html5拍照并下载。
这里前台html5怎么捕捉传数据的就不提了。后台接收,其实也比较简单,通过获取到前台传递的payload的形式的数据,看下面代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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了。
具体转换过程,看下面代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 block61 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 }
经过以上处理,就可以成功的把照片存放到你要存放的位置了。