java处理Base64存到服务器中(html控制摄像头拍照)

此文章已经默认我们拿到了前端的base64数据,

以下是我通过canvas调用摄像头拍照,返回的base64数据,此时我在浏览器的控制台输出了一下此数据,是已经拿到的。那么现在我通过jquery发送一个请求到我的servlet,把这个数据顺带也发了过去。

java处理Base64存到服务器中(html控制摄像头拍照)_第1张图片

后台拿到之后进行一下判断,看看我们有没有拿到此数据。

java处理Base64存到服务器中(html控制摄像头拍照)_第2张图片

好了,重头戏来了,.

public static String uploadPath = "../cinema_images";
public Boolean upload(PageContext pageContext, String imgStr) {
	
			String basePath = pageContext.getServletContext().getRealPath("/"); // 对应的实例名  就是jsp中内置对象 application
			System.out.println( basePath );
			String fileName =  uploadPath + "/" + new Date().getTime() + ".png"; // 上传的文件名
			String filePath = basePath; // 文件保存路径  绝对路径 
			System.out.println(filePath);
			System.out.println(fileName);
	        imgStr = imgStr.replace("data:image/png;base64,",""); //base64的格式的前缀必须去掉,否则解密是会报错
	       
	        try {
	        	 Decoder decoder = Base64.getDecoder(); //拿到解密对象
	 	        byte[] b = decoder.decode(imgStr); // 进行解密 返回一个byte数组
	 	       
	 	        ByteArrayInputStream bais = new ByteArrayInputStream(b);
				BufferedImage image = ImageIO.read(bais);
				Boolean image2 = ImageIO.write(image, "png", new File(filePath , fileName));
				return image2;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		return false;
		
	}

 我封装了一个方法,这里先定义一个默认的上传路径,uploadPath。、

调用此方法需传两个参数,一个是PageContext 对象,一个是我们前端发来的base64数据。

首先我们先通过pagecontext自带的方法获得我们服务器的绝对路径

再给我们的base64数据定义一个文件名,注意这里定义我们是用字符串拼接的方式,后面需要加上".png"。

然后需要将我们的base64数据的前缀去掉,不然等下解密的时候是行不通的。

接着就是通过Decoder decoder = Base64.getDecoder() 对我们的base64数据进行解密。

解密完成之后用我们的BufferImage 进行读取

接着就是写操作了,如图。

好了,现在我们看看如何调用此方法吧。

protected Boolean findss(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String imgStr = req.getParameter("photo");
		System.out.println(imgStr);
		 if (imgStr == null || "".equals(imgStr)){
             return null;
        }
        PageContext pageContext = JspFactory.getDefaultFactory().getDefaultFactory().getPageContext(this, req, resp, null, true, 2048, true);
        Base64UplodUtil upload = new Base64UplodUtil();
        return upload.upload(pageContext,imgStr);
	}

最后我们看看效果吧。

java处理Base64存到服务器中(html控制摄像头拍照)_第3张图片

 java处理Base64存到服务器中(html控制摄像头拍照)_第4张图片

over!

 

你可能感兴趣的:(tomcat,java-ee)