java后台保存base64图片数据

java后台保存base64图片数据

使用byte[] bytes = new BASE64Decoder().decodeBuffer(str);需要引入sun.misc.BASE64Decoder,但在eclipse中提示如下警告:

java后台保存base64图片数据_第1张图片


查阅后在一篇文章中提到:

“一直以来Base64的加密解密都是使用sun.misc包下的BASE64EncoderBASE64Decodersun.misc.BASE64Encoder/BASE64Decoder类。这人个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipseMyEclipse中直接使用,却找不到该类。”

详细解释可以参照:http://blog.sina.com.cn/s/blog_5a6efa330102v8st.html


一直以来Base64的加密解密都是使用sun.misc包下的BASE64EncoderBASE64Decodersun.misc.BASE64Encoder/BASE64Decoder类。这人个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipseMyEclipse中直接使用,却找不到该类。如下图!

java后台保存base64图片数据_第2张图片

解决方法如图:右键项目-》属性-》构建路经

java后台保存base64图片数据_第3张图片

右键项目-》属性-java bulid path-jre System Library-access rules-resolution选择accessible,下面填上** 点击确定即可!!!

 

 

java后台保存base64图片数据_第4张图片

 

java后台保存base64图片数据_第5张图片

这是英文版界面

java后台保存base64图片数据_第6张图片

另外网上也有用相应的替代的对象及方法,如使用

org.apache.commons.codec.binary.Base64类等。可以自己去查用!


以上内容均参考自:http://blog.sina.com.cn/s/blog_5a6efa330102v8st.html



改使用org.apache.commons.codec.binary.Base64


String base64Code = request.getParameter("base64Code");
Base64 base64 = new Base64();
byte[] bytes = base64.decodeBase64(new String(base64Code).getBytes());


public AjaxJson GetLayerList(HttpServletRequest request) throws Exception{
		AjaxJson j = new AjaxJson();
		String message = "";
		String base64Code = request.getParameter("base64Code");
		if(null == base64Code || "".equals(base64Code))
		{
			j.setSuccess(false);
		}
		
		String tempSavePath = sysConfigServiceI.getPathByTypeNo("2");//临时文件路径
		
		if(null ==tempSavePath || "".equals(tempSavePath)){
			j.setSuccess(false);
			systemService.addLog("扫描文件失败,没有设置扫描文件临时路径", Globals.Log_Type_SCAN, Globals.Log_Leavel_WARRING);
			message = "扫描文件失败,没有设置扫描文件临时路径";
			j.setMsg(message);
			return j;
		}
		
		if(!tempSavePath.endsWith("/") && !tempSavePath.endsWith("\\\\")){
			tempSavePath += "/";
		}
		
		File logosavedir = new File(tempSavePath);// path1为存放的路径
		if (!logosavedir.exists()) {// 如果不存在文件夹,则自动生成
			logosavedir.mkdirs();
		}
		String fileName = tempSavePath + UUIDGenerator.generate()+".jpg";
		
		try{
			Base64 base64 = new Base64();
			byte[] bytes = base64.decodeBase64(new String(base64Code).getBytes());
			
			ByteArrayInputStream in = new ByteArrayInputStream(bytes);
			byte[] buffer = new byte[1024];
			FileOutputStream out = new FileOutputStream(fileName);
			int bytesum = 0;
			int byteread = 0;
			while ((byteread = in.read(buffer)) != -1) {
				bytesum += byteread;
				out.write(buffer, 0, byteread); // 文件写操作
				out.flush();
			}
			out.close();
			
			j.setSuccess(true);
			message = fileName;
		}catch (Exception e) {
			j.setSuccess(false);
			message = "保存图片异常!";
		}
		j.setMsg(message);
		return j;
	}


另加若遇到上传图片超过2M时可能遇到的问题解决

通过修改tomcat下面的conf目录下的server.xml中 找到类似如下代码
  "20000"  port= "80" protocol= "HTTP/1.1" redirectPort= "8443" />
并在此代码里面加上属性 maxPostSize= "0" 0 表示不限制post请求长度
就很好的解决的这样的问题
当然做图片上传异步处理可以通过iframe来解决这个问题 但是感觉iframe毕竟没ajax好用


你可能感兴趣的:(java开发)