jSignature签名的用法,一文教会你(二)后台代码

1、先在我们的项目里加几个工具类,代码如下

AbstractUploadAction (名字可以自取,这个不影响)


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.tomcat.util.http.fileupload.IOUtils;
public abstract class AbstractUploadAction {public void get(HttpServletRequest request, HttpServletResponse response, String storeDir) {String requestPath = "get";String requestURI = request.getRequestURI();String path = requestURI.substring(requestURI.indexOf(requestPath) + 3);String separator = File.separator;String lcPath = "";File directory = new File(storeDir);String tempPath = directory.getAbsolutePath() + path.replace("/", separator);File downloadFile = new File(tempPath);if (downloadFile.exists()) {lcPath = directory.getAbsolutePath() + path.replace("/", separator);}try {InputStream input = new FileInputStream(lcPath);OutputStream output = response.getOutputStream();IOUtils.copy(input, output);input.close();output.close();} catch (Exception var14) {}}}

UploadFileAction 这里有一个@Value("${store.dir}") private String storeDir; 这是在yml里面的定义的,这里就是把文件放在我的D盘下的ms_file文件夹下面在这里插入图片描述

import java.io.IOException;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/res/file")
public class UploadFileAction extends AbstractUploadAction{@Value("${store.dir}")private String storeDir;//这个是在yml里面定义的/*** * @param folder 文件文件夹。即分类文件夹。如imgType1,imgType2。通过url的upload/后面的值来取值。也可换为其他取值方式。* @param request* @return* @throws IOException*/@RequestMapping(value = {"upload/{folder}"},method = {RequestMethod.POST, RequestMethod.GET})@ResponseBodypublic Object upload(@PathVariable("folder") String folder, HttpServletRequest request) throws IOException {UploadFileUtil uploadFileUtil = new UploadFileUtil();return uploadFileUtil.upload(storeDir, folder, request);}@RequestMapping("/get/**")public void download(HttpServletRequest request, HttpServletResponse response) {this.get(request, response, this.storeDir);} }

UploadUtil


import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.*;public class UploadUtil {public static void copyFile(MultipartFile file, File locFile) throws IOException {InputStream input = file.getInputStream();OutputStream output = new FileOutputStream(locFile);IOUtils.copy(input, output);output.close();input.close();}/**** @param requestUri 这个是数据库的url,如/res/file/get/signature/20200709114433.jpg* @param fileDir 这个是文件的实际存放地址,如D://ms_file* @return*/public static boolean delete(String requestUri, String fileDir) {String requestPath = "get";String path = requestUri.substring(requestUri.indexOf(requestPath) + 3);//File directory = new File(fileDir);//String tempPath = directory.getAbsolutePath() + path;String tempPath = fileDir + path;File deleteFile = new File(tempPath);return deleteFile.exists() ? deleteFile.delete() : false;}}

Base64ToPicture (这个是base64和图片互转的一个工具类)

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import java.io.*;
import java.util.Base64;
public class Base64ToPicture {/*** 将base64转成图片并存到指定文件夹* @param imgStrs* @param imgFilePath* @return*/public static boolean GenerateImage(String imgStrs, String imgFilePath) {// 对字节数组字符串进行Base64解码并生成图片if (imgStrs == null){// 图像数据为空return false;}int imgStrLen = imgStrs.length();String imgStr = imgStrs.substring(22,imgStrLen);//System.out.println(imgStr);BASE64Decoder decoder = new BASE64Decoder();try {// Base64解码byte[] bytes = decoder.decodeBuffer(imgStr);for (int i = 0; i < bytes.length; ++i) {if (bytes[i] < 0) {// 调整异常数据bytes[i] += 256;}}// 生成jpeg图片OutputStream out = new FileOutputStream(imgFilePath);out.write(bytes);out.flush();out.close();return true;} catch (Exception e) {return false;}}/*** 将图片文件转化为字节数组字符串,并对其进行Base64编码处理* @param imgFilePath* @return*/public static String GetImageStr(String imgFilePath) {//byte[] data = null;Base64.Decoder decoder = Base64.getDecoder();// 读取图片字节数组try {InputStream in = new FileInputStream(imgFilePath);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}// 对字节数组Base64编码BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);// 返回Base64编码过的字节数组字符串}
}

2、看一下我的service吧

public Result save(ProjectFile projectFile, HttpServletRequest request){Result result = new Result();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String fileAdd = sdf.format(new Date());//图片名称是  当前日期    避免数据重复String fileName = fileAdd  + ".jpg";//这个Base64ToPicture就是我们上面的工具类//这个步骤是把base64转成图片,并存在storeDir+"/signature/"+fileName这个目录下,这个storeDir是我们自己定义的,比如这个是D:/ms_file/signature/Base64ToPicture.GenerateImage(projectFile.getEncode(),storeDir+"/signature/"+fileName);//下面的步骤是给我们的数据库插入一条关于这个签名的记录,方便我们以后找到他String url = "/res/file/get/" + "signature" + "/" + fileName;projectFile.setId(UUIDTool.createUUID());projectFile.setUrl(url);projectFile.setCreateTime(new Date());projectFile.setFileType("jpg");projectFile.setType("signature");projectFile.setName(fileName);projectFileMapper.insert(projectFile);result.setMessage("签名成功!");result.setCode(1);return result;}

这个操作过后我们发现我们的数据库多了一条记录,数据库自己设计,在这里URL我存的是这样的格式的:/res/file/get/signature/20200709114433.jpg,其实我们的文件在D:\ms_file\signature\20200709114433.jpg,我们会发现这里没有指定是哪个盘,哪个文件夹下,反而多了/res/file/get/这串东西,大家别着急,这个是我们自己定义的。我们可以发现UploadFileAction 这个工具类里定义了@RequestMapping("/res/file"),get也是在UploadFileAction 里定义的。我们数据库要和这里保持一致性,大家可以随便定义;

3、查看我们的签名

先去数据库中查到我们需要的那条数据,拿到URL,就也是上面举例的/res/file/get/signature/20200709114433.jpg。
在页面中我们这样显示


http({data: {projectId:projectId,institutionsId:institutionsId},url: 'projectFile/queryByInstitutionsId',type: 'post',dataType: 'json',success: function(data) {that.signatureList = data;for(var i = 0;i<that.signatureList.length;i++){$("#imageList").append("<img src=http://127.0.0.1:7003" + that.signatureList[i].url + ">");}}
});

只需要拼接起来就好了,后台端口加我们的URL就可以了,它会去调用我们工具类中的get方法,从而显示出来。

这些工具类还可以用于图片上传。这个就放到下期吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5 多图片上传(前端+后台详解)

HTML5 多图片上传&#xff08;前端后台详解&#xff09;1、参考jquery插件库2、修改代码3、添加的后台代码4、删除的后台代码1、参考jquery插件库 手机端实现多图片上传 2、修改代码 我发现他这里的代码仅仅只是显示出来了&#xff0c;对后台一点作用都没有&#xff0c;于是…

vue2.0移动端自定义性别选择提示框

这篇文章主要是简单的实现了vue2.0移动端自定义性别选择的功能&#xff0c;很简单但是经常用到&#xff0c;于是写了一个小小的demo&#xff0c;记录下来。 效果图&#xff1a; 图片.png实现代码&#xff1a; <template><div class"app"><div class&q…

微信小程序入门的一些建议,替大家踩坑

小程序入门教程1&#xff0c; 建议先去看官方文档2&#xff0c;说说app.json这个文件3、app.js4、点击事件5、跳转页面最后要说一下我踩的一个大坑&#xff0c;样式问题1&#xff0c; 建议先去看官方文档 微信小程序官方文档 官方文档里有下载微信开发者工具的地址&#xff0c…

云服务器Linux安装,配置,使用nginx

云服务器Linux安装&#xff0c;配置&#xff0c;使用nginxlinux安装nginxnginx的使用linux安装nginx 检查是否安装了GCC&#xff08;可在任何目录下输入&#xff09; yum list installed | grep "gcc"如果像下图一样&#xff0c;就说明安装了&#xff0c;反之没安装…

原来文化设计可以这样玩!

设计是什么&#xff1f;设计是一种以科学的方法去高效解决问题的办法&#xff0c;为之设计。例如一个灯&#xff0c;是为了照明&#xff0c;如果改良的灯&#xff0c;肯定是为了高效或者节能地解决照明这个需求&#xff0c;没毛病吧&#xff1f; 那么中秋的花灯是什么&#xff…

Windows安装python,以及python的集成开发环境Pycharm

安装python&#xff0c;以及python的集成开发环境Pycharm1&#xff0c;安装python&#xff08;Windows&#xff09;2&#xff0c;安装python的集成开发环境1&#xff0c;安装python&#xff08;Windows&#xff09; 进入python官网 点击图中标识出来的这个&#xff0c;是个ex…

Python 最难的问题

Python 最难的问题 超过十年以上&#xff0c;没有比解释器全局锁&#xff08;GIL&#xff09;让Python新手和专家更有挫折感或者更有好奇心。 未解决的问题 随处都是问题。难度大、耗时多肯定是其中一个问题。仅仅是尝试解决这个问题就会让人惊讶。之前是整个社区的尝试&#x…

解决echart中:Cannot read property ‘queryComponents‘ of undefined

在使用案例的echart的日历图表的时候&#xff0c;遇到了&#xff1a; Uncaught TypeError: Cannot read property ‘queryComponents’ of undefined 思考了很久&#xff0c;还百度了&#xff0c;结果还是不好使&#xff0c;最后终于被我在一个问答了找到了答案。 刚开始我是…

ListT.Find用法学习

泛型集合List<T>中的Find函数用于查找集合中符合指定条件的元素..相比foreach遍历元素&#xff0c;用Find函数查找&#xff0c;代码更简洁. 函数原型如下&#xff1a; public T Find(Predicate<T> match); 其中Predicate为C#定义好的委托&#xff0c;原型如下&…

从零开始的全栈工程师——html篇1.6

浮动与伪类选择器 一、浮动(float) 1.标准文档流 标准文档流是一种默认的状态 浏览器的排版是根据元素的特征&#xff08;块和行级&#xff09; 从上往下 从左往右排版 这就是标准文档流 2.浮动(float)float:left/right; 因为标准文档流会使页面的状态固定 元素会自动从左往…

idea+springboot+mongodb的简单测试使用分享

1&#xff0c;先去官网下载&#xff0c;选择版本&#xff0c;选择Windows&#xff0c;就可以点击下载了。 2&#xff0c;安装mongodb。 下一步安装 “install mongoDB compass” 不勾选&#xff08;当然你也可以选择安装它&#xff0c;可能需要更久的安装时间&#xff09;&a…

project01

the question 最早时间出发为第一架航班&#xff0c;接下来第二架要求&#xff1a;到达日期与第一架航班的出发日期的时间间隔不小于45分钟&#xff0c;且序号最小依次类推将所有航班排完the data the transmission of the data import numpy as np import pandas as pd from p…

idea+springboot+mongodb的实战使用分享

昨天的时候我们先在网上找了测试类&#xff0c;测试了一下mongdb的简单使用&#xff0c;今天就来实地在项目中用一用 没安装mongodb的参考我上一篇文章&#xff1a;ideaspringbootmongodb的简单测试使用分享 其实我们初学者最好是安装一个可视化的工具&#xff0c;这样方便我…

Nginx整合tomcat,实现反向代理和负载均衡

1.Nginx与Tomcat整合,通过Nginx反向代理Tomcat。 Nginx安装路径为&#xff1a;/usr/local//nginx 首先切换路径到&#xff1a;/usr/local//nginx/conf通过命令 vim/usr/local//nginx/conf/nginx.conf打开配置文件 修改Nginx配置文件&#xff1a;/usr/local//nginx/conf/nginx.…

ElasticSearch Java SpringBoot根据时间范围分组求和

需求是这样的&#xff1a; 近7天的用户登陆统计&#xff0c;根据日期来返回的要是data:[{date&#xff1a;“2021-04-01”,count:“1”}] Autowired private ElasticsearchTemplate elasticsearchTemplate;SimpleDateFormat formater new SimpleDateFormat("yyyy-MM-dd&…

开发springboot项目,遇到的一些问题总结

首先看一下我的项目目录吧 1&#xff0c;添加拦截器 我们做项目肯定要用到拦截器这个功能哈&#xff0c;没登录的话一些页面我们是不能访问的哈&#xff0c;这里是用到了HandlerInterceptor。 分别在图中的位置创建2个目录和2个文件&#xff1a; WebConfig: import org.sp…

centOS下lnamp安装

首先安装apache,mysql ,最后安装php 1>apache安装 安装&#xff1a;yum install -y httpd 运行&#xff1a;/bin/systemctl start httpd.service 执行完运行命令之后是看不到效果的&#xff0c;这时候再输入查看apache服务状态命令来查看服务是否已经启动&#xff1a; 查看状…

java使用itext填充pdf模板,超简单教学,有手就行

java使用itext填充pdf模板1、先去建一个Word文件&#xff0c;设置好想要填充的地方&#xff0c;留好位置&#xff0c;设置好下划线2、将Word另存为pdf3、打开电脑中的Adobe Acrobat pro DC&#xff08;这个应该win10 都有&#xff0c;搜索一下就出来了&#xff09;&#xff0c;…

KVM使用

这里使用的是Ubuntu18.04桌面版虚拟机 关于KVM可以看一下我之前的博客,有一些简单的介绍。 1.在打开虚拟机之前先开启此虚拟机的虚拟化功能。 2.安装KVM及其依赖项 wywy-virtual-machine:~$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager 3.安装完成…

mybatis-plus3.5.1学习笔记

1、ID 1>id策略有6种&#xff1a; 想要id自增就在id上面添加 TableId(type IdType.AUTO)mybaits-plus的默认的主键策略是&#xff1a; TableId(type IdType.ID_WORKER)这样生成的是19位的数字id。 有的人喜欢使用UUID&#xff1a; TableId(type IdType.UUID)2、cre…