java工具类------pad文件上传

22 篇文章 0 订阅
16 篇文章 0 订阅

1.在这里简单说一下这块的知识,因为在开发中遇到了,所以我整理了一下这块的知识,这边封装的是一个sevlet,所以一定要记着在web.xml中配置,这块不做过多赘述,下面直接说代码,代码如下:

import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

public class PdfUpload extends HttpServlet
{
	private static final long serialVersionUID = 1L;

	private long size;
	private BufferedImage bsrc;
	private String type;

	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{         
		doPost(request,response);         //将get请求和post请求统一发送给doPost处理     } 
	}
	
	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		response.setCharacterEncoding("UTF-8");
		String returnMessage = "{status:'SUCCESS', data:''}";
		response.addHeader("Access-Control-Allow-Origin", "*");
		response.addHeader("Access-Control-Allow-Headers", "apptypeid,platformid,city,district,Content-Type, Authorization, Accept,X-Requested-With");
		response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");

		Calendar date = Calendar.getInstance();
		String saveDirectory = request.getSession().getServletContext().getRealPath("/upload"); // 在磁盘上保存的路径
		//String saveDirectory = "C:/Users/Administrator/Desktop";
		String saveUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/upload";
		String saveImgUrl = "";
		System.out.println("服务器的路径============="+saveDirectory);
		System.out.println("保存的路径============"+saveUrl);
		
		// 新建对应日期文件夹
		int iYear = date.get(Calendar.YEAR);
		saveDirectory += File.separator + iYear;
		saveUrl += "/" + iYear;

		int iMonth = date.get(Calendar.MONTH) + 1;
		saveDirectory += File.separator + iMonth;
		saveUrl += "/" + iMonth;

		int iDay = date.get(Calendar.DATE);
		saveDirectory += File.separator + iDay;
		saveUrl += "/" + iDay;

		File f = new File(saveDirectory);
		if (!f.isDirectory())
		{
			f.mkdirs();
		}

		if (ServletFileUpload.isMultipartContent(request))
		{
			DiskFileItemFactory dff = new DiskFileItemFactory();
			dff.setRepository(f);
			dff.setSizeThreshold(1024000);
			ServletFileUpload sfu = new ServletFileUpload(dff);
			FileItemIterator fii = null;
			try
			{
				fii = sfu.getItemIterator(request);
			}
			catch (FileUploadException e1)
			{
				e1.printStackTrace();
			}
			String saveFilePath = ""; // 图片地址
			try
			{
				int iIndex = 0;
				while (fii.hasNext())
				{
					FileItemStream fis = fii.next();
					try
					{
						if (!fis.isFormField() && fis.getName().length() > 0)
						{
							iIndex++;
							String saveFileName = iYear + "" + iMonth + "" + iDay + "" + date.get(Calendar.HOUR) + date.get(Calendar.MINUTE) + "" + date.get(Calendar.SECOND) + "-" + iIndex + ".pdf";

							saveFilePath = saveDirectory + File.separator + saveFileName;
							saveUrl += "/" + saveFileName;
							
							BufferedInputStream in = new BufferedInputStream(fis.openStream());
							FileOutputStream a = new FileOutputStream(new File(saveFilePath));
							BufferedOutputStream output = new BufferedOutputStream(a);
							Streams.copy(in, output, true);// 开始把文件写到你指定的上传文件夹
							
							String imgName = iYear + "" + iMonth + "" + iDay + "" + date.get(Calendar.HOUR) + date.get(Calendar.MINUTE) + "" + date.get(Calendar.SECOND) + "-" + iIndex+"jpg";
							saveImgUrl += saveDirectory + File.separator + imgName;
							
							System.out.println("完整路径================================="+saveUrl);
							System.out.println("图片路径================================="+saveImgUrl);
							
							PDF_to_JPGFuncation funcation = new PDF_to_JPGFuncation();
							PDF_to_JPGFuncation.tranfer(saveFilePath,
									saveImgUrl, 1);
							
							type = fis.getName().substring(fis.getName().lastIndexOf(".")).toLowerCase();
						}

					}
					catch (Exception e)
					{
						e.printStackTrace();
						returnMessage =  "{\"status\":\"ERROR\",\"data\":\"\"}";
					}
				}

				if (returnMessage.indexOf("status:'SUCCESS'") > -1)
				{

					String savePath=saveFilePath.replaceAll("\\\\", "/");
					returnMessage =  "{\"status\":\"OK\",\"data\":\"" + savePath + "\"}";
				}

			}
			catch (FileUploadException e)
			{
				e.printStackTrace();
				returnMessage =  "{\"status\":\"ERROR\",\"data\":\"\"}";
			}
			//String urlEncoder = URLEncoder.encode(returnMessage, "utf-8");
			//String url = urlEncoder.replace("+", "%20");
			response.getWriter().println(returnMessage);

		}
	}

	private String readFileItem(FileItemStream fis) throws IOException
	{
		BufferedInputStream in = new BufferedInputStream(fis.openStream());
		byte[] bytes = readStream(in);

		if (bytes != null && bytes.length > 0)
		{
			try
			{
				return new String(bytes, 0, bytes.length);
			}
			catch (Exception e)
			{
				return "";
			}
		}
		return "";
	}

	private byte[] readStream(InputStream networkStream) throws IOException
	{
		byte[] bytes = new byte[100];
		byte[] bytecount = null;
		int n = 0;
		int ilength = 0;
		try
		{
			while ((n = networkStream.read(bytes)) >= 0)
			{
				if (bytecount != null)
				{
					ilength = bytecount.length;
				}
				byte[] tempbyte = new byte[ilength + n];
				if (bytecount != null)
				{
					System.arraycopy(bytecount, 0, tempbyte, 0, ilength);
				}

				System.arraycopy(bytes, 0, tempbyte, ilength, n);
				bytecount = tempbyte;

				if (n == -1)
					break;
			}
		}
		finally
		{
			networkStream.close();
		}
		return bytecount;
	}

	public void delFile(String filename)
	{

		File file = new File(filename);
		if (file.isFile() && file.exists())
		{
			file.delete();
			System.out.println("删除成功");
		}
		else
		{
			System.out.println("要删除的文件不存在");
		}
	}

}


另外在这个方法中涉及到了一个类,代码如下:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;

public class PDF_to_JPGFuncation {

	public static final String FILETYPE_JPG = "jpg";
	public static final String SUFF_IMAGE = "." + FILETYPE_JPG;

	public static void tranfer(String filepath, String imagepath, float zoom)
			throws PDFException, PDFSecurityException, IOException {

		Document document = null;

		float rotation = 0f;

		document = new Document();

		document.setFile(filepath);

		BufferedImage img = (BufferedImage) document.getPageImage(0, GraphicsRenderingHints.SCREEN,
				Page.BOUNDARY_CROPBOX, rotation, zoom);


		Iterator iter = ImageIO.getImageWritersBySuffix(FILETYPE_JPG);
		
		ImageWriter writer = (ImageWriter) iter.next();
		
		File outFile = new File(imagepath + document.getNumberOfPages() + "." + FILETYPE_JPG);
		
		FileOutputStream out = new FileOutputStream(outFile);
		
		ImageOutputStream outImage = ImageIO.createImageOutputStream(out);
		
		writer.setOutput(outImage);
		writer.write(new IIOImage(img, null, null));

	}

}

至此代码部分结束,上面用的jar文件是icepdf-core-4.3.3.jar,大家可以上网上搜索下载!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值