img src 使用base64格式 上传、根据文件名显示所有图片 java代码

林德华
2023-12-01

最近在做ca签名,key验证通过后传图片为base64格式图片,保存至自己服务器 (大概操作)

首先获取的src=“data:image/png;base64,sealBase64(获取到的参数)”

function qr(){ 
	var base64= $('#image').attr('src');
	//过滤data:URL
	var base64Data = base64.replace(/^data:image\/\w+;base64,/, "");
	$.ajax({
		  type: "post",
		  url:'upload',
		  data: {
			"base64Data":base64Data
		},
		  success: function(result) {//上传成功后的处理
		  	if(result==true){
			}
			else{
			}
		  },
		  error: function(msg) {
		   console.log("Fail");
		  }
		 });
};
//java 后端代码
	/**
	 *   上传文件
	 */
	@RequestMapping(value="/upload",method= {RequestMethod.GET,RequestMethod.POST})
	@ResponseBody
	public Boolean upload(String base64Data,HttpServletRequest request){
		boolean flag=false;
			// 生成文件路径
			String path = request.getSession().getServletContext().getRealPath("\\upload\\"+id+"\\");
			System.out.println("路径:"+path);
					
			String files = getFiles(base64Data, path);
			if (files == null) {
				return flag;
			}
			flag=true;
				return flag;
	  }
//工具类
 /**
	 * base64解码 创建文件并保存图片
	 * @param base64Data
	 * @param path
	 * @return
	 */
	public static String getFiles(String base64Data,String path) {
		BASE64Decoder decoder = new BASE64Decoder();
		// Base64解码      
		byte[] imageByte = null;
			try {
				imageByte = decoder.decodeBuffer(base64Data);
				for (int i = 0; i < imageByte.length; ++i) {      
					if (imageByte[i] < 0) {// 调整异常数据      
						imageByte[i] += 256;      
					}      
				}      
			// 生成文件名
			String files = new SimpleDateFormat("yyyyMMddHHmmssSSS")
					.format(new Date())
					+ (new Random().nextInt(9000) % (9000 - 1000 + 1) + 1000)
					+ ".png";
			
				// 生成文件			
				  File tempFile = new File(path, files);
				    if (!tempFile.getParentFile().exists()) {
				      tempFile.getParentFile().mkdirs();
				    }
				    if (tempFile.exists()) {
				      tempFile.delete();
				    }
				    tempFile.createNewFile();
				    
					OutputStream imageStream = new FileOutputStream(tempFile);
					imageStream.write(imageByte);
					imageStream.flush();
					imageStream.close();
					return files;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return null;      
	}
//获取文件夹下的所有文件
@RequestMapping(value = "/getImgs", method = { RequestMethod.GET, RequestMethod.POST })
	public ModelAndView getImgs( HttpServletRequest request,HttpServletResponse response) {
	String path = request.getSession().getServletContext().getRealPath("\\upload\\"+id+"\\");
		ArrayList<String> fileLists=new ArrayList<String>();
	    fileLists=FileImg.getFiles(path);
	    mv.getModel().put("fileLists", fileLists);
		mv.setViewName("/a/index");
		return mv;
	}
/**
     * 获取文件夹下的所有文件名     工具类里 可以判断下 后缀是png、jpg 什么的 做个筛选 我没有做
     */
    public static ArrayList<String> getFiles(String filePath) {
        ArrayList<String> fileList = new ArrayList<String>();
        File root = new File(filePath);
        File[] files = root.listFiles();
        if (files == null) {
        	return fileList;
		}
        	for (File file : files) {
        		if (file.isDirectory()) {
        			getFiles(file.getName());
        			fileList.add(file.getName());
        		} else {
        			String picPathStr = file.getName();
        			fileList.add(picPathStr);
        		}
        	}
        return fileList;
    }
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

//显示 
<c:if test="${ fn:length(fileLists) >0}">
		<c:forEach var="fileList" items="${fileLists}">									    
		 	<img src="upload/${id }/${fileList}" />
		</c:forEach>		
</c:if>	

如果有什么问题,请各位大神私信我

 类似资料: