package com.yonyou.com;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.yonyou.com.util.PKCS;
import com.yonyou.com.util.signPDF;
public class UpLoadFilePdf extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter outPut=response.getWriter();
//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
// String savePath1=this.getServletContext().getRealPath("/WEB-INF/upload");
//设置生成证书路径
String pfxPath = this.getServletContext().getRealPath("/WEB-INF/pfx");
File file = new File(savePath);
//判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath+"目录不存在,需要创建");
//创建目录
file.mkdir();
}
file=new File(pfxPath);
//判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath+"目录不存在,需要创建");
//创建目录
file.mkdir();
}
//消息提示
String message = "";
try{
//使用解析器解析
//使用Apache文件上传组件处理文件上传步骤:
//1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传文件名的中文乱码
// upload.setHeaderEncoding("UTF-8");
//3、判断提交上来的数据是否是上传表单的数据
// if(!ServletFileUpload.isMultipartContent(request)){
// //按照传统方式获取数据
// return;
// }
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list){
//如果fileitem中封装的是普通输入项的数据
if(item.isFormField()){
String name = item.getFieldName();
//解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
//value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
String filename = item.getName();
if(filename==null || filename.trim().equals("")){
continue;
}
//获取文件类型
String fileType= item.getContentType();
if(!"pdf".equals(fileType.substring(fileType.lastIndexOf("/")+1))){
outPut.print("您上传的文件类型不正确,请上传pdf格式文件!");
break;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
//获取item中的上传文件的输入流
InputStream in = item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
savePath=savePath + "\\" + filename;
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
out.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除处理文件上传时生成的临时文件
item.delete();
}
//生成证书文件
pfxPath=pfxPath+"\\demo.pfx";
boolean bool=PKCS.ExecPfx(pfxPath);
//pdf文件添加电子标签
boolean boolpdf=false;
if(bool){
boolpdf=signPDF.signDoc(savePath, pfxPath, "111111");
}
if(boolpdf){
outPut.print( "文件上传成功!");
}else{
outPut.print("文件上传失败");
}
}
}catch (Exception e) {
message= "文件上传失败!";
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java实现pdf文件电子签名
共33个文件
jar:6个
java:5个
class:5个
4星 · 超过85%的资源 需积分: 50 371 下载量 5 浏览量
2016-05-06
10:47:21
上传
评论 13
收藏 4.23MB RAR 举报
温馨提示
本示例通过java自动生成pfx证书,根据生成的证书,自动实现对pdf文件的电子签名
资源推荐
资源详情
资源评论
收起资源包目录
signautre.rar (33个子文件)
signautre
.project 1KB
WebContent
WEB-INF
img
12.png 144KB
sign.png 3KB
13.png 6KB
lib
log4j-1.2.16.jar 470KB
itextpdf-5.1.3.jar 1.57MB
bcmail-jdk15-1.46.jar 476KB
commons-fileupload-1.3.jar 67KB
bcprov-jdk15-1.46.jar 1.73MB
commons-io-2.4.jar 181KB
web.xml 1KB
js
jquery-1.8.0.js 261KB
jquery.form.js 43KB
fileuploadtest.jsp 1KB
META-INF
MANIFEST.MF 39B
src
com
yonyou
com
UpLoadFilePdf.java 7KB
util
PKCS.java 2KB
signPDF.java 5KB
KeyStoreFactory.java 4KB
SignatureException.java 3KB
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 345B
org.eclipse.jdt.core.prefs 364B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.core.resources.prefs 205B
org.eclipse.wst.common.component 479B
.jsdtscope 503B
build
classes
com
yonyou
com
util
PKCS.class 3KB
KeyStoreFactory.class 5KB
SignatureException.class 3KB
signPDF.class 6KB
UpLoadFilePdf.class 5KB
.classpath 841B
共 33 条
- 1
rlk430
- 粉丝: 2
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页