package com.pdf.controller; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; 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 org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.pdf.util.ImagesPDFUtil; /** * 图片转换成pdf * @author chenguoji * */ @Controller public class ImagesAndPDF { /** * 上传文件并处理转换 * @param request * @param response * @return */ @SuppressWarnings("unchecked") @RequestMapping("/images") public String images(HttpServletRequest request,HttpServletResponse response){ //得到上传文件的保存目录 String savePath = request.getServletContext().getRealPath("/upload"); File file = new File(savePath); //判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(savePath+"目录不存在,需要创建"); //创建目录 file.mkdir(); } //保存PDF文件目录 String pdfUrl = request.getServletContext().getRealPath("/pdf"); File file2 = new File(pdfUrl); //判断上传文件的保存目录是否存在 if (!file2.exists() && !file2.isDirectory()) { System.out.println(pdfUrl+"目录不存在,需要创建"); //创建目录 file2.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 "error"; } //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; } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename.substring(filename.lastIndexOf("\\")+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(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(); message = "文件上传成功!"; System.out.println("图片上传路径:"+savePath); System.out.println("图片上传路径文件名称:"+filename); System.out.println("图片上传路径文件名称后缀名:"+item.getContentType()); //转换成pdf文件 String imageUrl = savePath + "\\" + filename; String name = filename.substring(0,filename.lastIndexOf("."));//获取除后缀1位的名称 //getFilename .substring(getFilename .lastIndexOf("."));//这个是获取后缀名 new ImagesPDFUtil().jpg2Pdf(imageUrl, pdfUrl+"\\" + name+".pdf"); } } }catch (Exception e) { message= "文件上传失败!"; e.printStackTrace(); } request.setAttribute("success", message); return "redirect:/query"; } /** * 查询转换的pdf文件 * @param request * @param response * @return */ @RequestMapping("/query") public String query(HttpServletRequest request, HttpServletResponse response){ //转换目录 String pdfPath = request.getServletContext().getRealPath("/pdf"); Map<String,String> pdfMap = new HashMap<String,String>(); listfile(new File(pdfPath),pdfMap);//File既可以代表一个文件也可以代表一个目录 request.setAttribute("pdfMap", pdfMap); return "message"; } /** * @Description: 递归遍历指定目录下的所有文件 * @param file 即代表一个文件,也代表一个文件目录 * @param map 存储文件名的Map集合 */ public void listfile(File file,Map<String,String> map){ //如果file代表的不是一个文件,而是一个目录 if(!file.isFile()){ //列出该目录下的所有文件和目录 File files[] = file.listFiles(); //遍历files[]数组 for(File f : files){ //递归 listfile(f,map); } }else{ /** * 处理文件名 */ String realName = file.getName().substring(file.getName().indexOf("_")+1); //file.getName()得到的是文件的原始名称,这个名称是唯一的,因此可以作为key,realName是处理过后的名称,有可能会重复 map.put(file.getName(), realName); } } /** * 下载文件 * @param path pdf路径 * @param name 文件名称 * @param request * @param response */ @RequestMapping("/download") public void download(String filename, HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub try { //得到要下载的文件名 String fileName = filename; fileName = new String(fileName.getBytes("iso8859-1"),"UTF-8"); //转换的pdf文件保存在pdf目录当中 String path=request.getServletContext().getRealPath("/pdf"); //得到要下载的文件 File file = new File(path + "\\" + fileName); //如果文件不存在 if(!file.exists()){ request.setAttribute("message", "您要下载的资源已被删除!!"); return; } //处理文件名 String realname = fileName.substring(fileName.indexOf("_")+1); //设置响应头,控制浏览器下载该文件 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8")); //读取要下载的文件,保存到文件输入流 FileInputStream in = new FileInputStream(path + "\\" + fileName); //创建输出流 OutputStream out = response.getOutputStream(); //创建缓冲区 byte buffer[] = new byte[1024]; int len = 0; //循环将输入流中的内容读取到缓冲区当中 while((len=in.read(buffer))>0){ //输出缓冲区的内容到浏览器,实现文件下载 out.write(buffer, 0, len); } //关闭文件输入流 in.close(); //关闭输出流 out.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

Sisphyus LV1
2022年2月17日
我的最代码 LV20
2022年1月14日
xuexizhuanyong23 LV16
2021年9月24日
xmjying LV13
2020年3月19日
lsongssl LV2
2019年6月14日
DU-ZB LV13
2019年3月27日
麻辣小龙虾 LV11
2019年3月12日
zhangshu6682 LV7
2019年1月6日
tanyunqing LV8
2018年7月11日
gggbbbb LV1
2018年6月12日