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

2023-11-11

最近在做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>	

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • GitHub开源:狗屁不通文章生成器

    万字申请 废话报告 魔幻形式主义大作怎么写 GitHub开源狗屁不通文章生成器了解一下 只要输入一句话 系统就会给你一篇万字长文 查看源代码编写风格清新脱俗 并且毫无算法 简单暴力 直接在关键语句前后加上废话 名人名言 GitHub Git
  • 关系数据库中连接池的机制是什么?

    前提 为数据库连接建立一个缓冲池 1 从连接池获取或创建可用连接 2 使用完毕之后 把连接返回给连接池 3 在系统关闭前 断开所有连接并释放连接占用的系统资源 4 能够处理无效连接 限制连接池中的连接总数不低于或者不超过某个限定值 其中有几
  • 模式识别之分类器

    常见分类器介绍 1 SVM分类器 监督学习分类器 答 训练样本必须先标识不同类别 然后进行训练 SVM算法就是找一个超平面 对于已经被标记的训练样本 SVM训练得到一个超平面 使得两个类别训练集中距离超平面最近的样本之间的垂直距离要最大 也
  • Java--Map和HashMap基础

    一 Map常用方法 1 Map集合在 java util Map 包下 Map集合以键值对 key和value 的方式存储数据 key和value都是引用数据类型 都是存储对象的内存地址 2 Map接口中常用方法 V put K key V
  • W3C?什么是W3C相关标准?

    什么是W3C标准 什是W3C标准 不是一个标准 而是万维网联盟制定的一系列标准 网页主要由三部分组成 结构 Structure 表现 Presentation 和行为 Behavior 对应的标准也分三方面 结构化标准语言主要包括XHTML
  • 数据采集+数据可视化练习(2022-1-6)

    任务书3 赛题说明 竞赛内容分布 竞赛时长 任务一 Spark 组件部署管理 Standalone 模式 15 任务二 数据采集 20 任务三 数据清洗与分析 30 任务四 数据可视化 20 任务五 综合分析 10 团队分工明确合理 操作规
  • Python-Django毕业设计信息安全风险评估系统设计与实现(程序+Lw)

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • CentOs yum源配置

    yum 的理念是使用一个中心仓库 repository 管理一部分甚至一个distribution 的应用程序相互关系 根据计算出来的软件依赖关系进行相关的升级 安装 删除等等操作 减少了Linux 用户一直头痛的dependencies
  • 通过opencv与神经网络对滑动验证码的一次深入学习

    好久没写博客了 人到中年 有点儿犯懒 从信息安全行业 又去了IT合规领域 与信息安全结合还是两手抓 两手都不硬 由于工作原因 需要获取一个token来请求接口 奈何没有现成的接口 需要在web端登录才可以获取 既然如此 想要实现这个功能肯定
  • 【LeetCode解题报告】《算法基础009_算术基本定理》- Java

    目录 一 507 完美数 1 题目 2 分析 3 代码 二 263 丑数 1 题目 2 分析 3 代码 一 507 完美数 1 题目 507 完美数 对于一个 正整数 如果它和除了它自身以外的所有 正因子 之和相等 我们称它为 完美数 给定
  • PHP通过URL远程下载图片到本地

    一 业务场景 我们需要远程将微信提供接口生成的临时二维码图片下载下来之后使用本地服务器去访问图片并存储在服务器数据库作为记录 此方法同样可以帮助你爬取网上一些公开数据 如cdnjs css 所需参数 公网能够访问到的图片 文件 地址 二 代
  • Source Insight给Linux内核创建工程

    所有文档请关注公众号 一口Linux 后台回复 ubuntu linux驱动视频同步更新到 https live bilibili com 22719960 一 Source Insight安装 1 预先准备好 Source Insight
  • ubuntu 文件删除后磁盘没有释放

    磁盘满了 删除文件后df发现没有变化 base root xddz df h Filesystem Size Used Avail Use Mounted on udev 32G 0 32G 0 dev tmpfs 6 3G 2 8M 6
  • 在JDBC连接池中启动Oracle RAC的TAF

    Oracle RAC 的一个负责故障切换处理的主要组件是透明应用程序故障切换 TAF 选件 下面列举通过JDBC实现的透明应用程序故障切换的代码 more Tele zhou Class forName oracle jdbc driver
  • RabbitMq结合springBoot实现延时任务

    简介 rabbitMQ延时任务的实现思想 rabbitmq实现延时任务本质就是使用 过期时间 和 死信队列 实现的 首先定义一个死信队列和死信队列的消费者 这个死信队列用来接收延时队列过期的消息 死信队列消费者用来接收到过期消息后就进行消费
  • FFmpeg中调用av_read_frame函数导致的内存泄漏问题

    使用FFmpeg的av read frame函数后 每读完一个packet 必须调用av packet unref函数进行内存释放 否则会导致内存释泄漏 在vs 博主所用的ffmpeg版本是3 4 2 vs版本是vs2015 中编译运行如下
  • [语义分割]基于VGG网络搭建FCN-8s并在VOC2012数据集上训练

    文章目录 1 数据集选取 1 1数据集简介 1 2 数据预处理 1 2 1踩坑记录1 1 2 2 读取图片路径 1 2 3 自定义图像增强与预处理模块 1 3自定义数据集类 1 3 1数据标签可视化 2 搭建FCN 8s网络 2 1基础FC
  • uni-app组件传值

    目录 一 父组件给子组件传值 父组件 elementFather vue 子组件 element vue 效果图 二 子组件给父组件传值 子组件 element vue 父组件 elementFather vue 效果图 三 兄弟组件之间传
  • 用jupyter读取mysql中的数据的两种方式

    不管是采用哪种方式都应该先保证创建了目标数据库 即在mysql data文件夹下有以目标数据库名称命名的子文件夹 且子表应该为以下格式 而不是 sql 未执行命令 文件 首选方法二 因为仅SQLAlchemy可连接支持read sql ta
  • img src 使用base64格式 上传、根据文件名显示所有图片 java代码

    最近在做ca签名 key验证通过后传图片为base64格式图片 保存至自己服务器 大概操作 首先获取的src data image png base64 sealBase64 获取到的参数 function qr var base64 im