文件上传下载删除工具类

package com.xxx.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.Properties;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.struts.upload.FormFile;

/**
 * 文件传输工具类(文件上传,文件下载,文件删除)
 * 
 * @author Gmj
 * 
 */
public class FileTransferUtil
{
	private static final int MAXSIZE = 2 * 1024 * 1024;// 2M的缓冲区大小

	/**
	 * 文件上传
	 * 
	 * @param file
	 *            FormFile
	 * @param folder
	 *            文件在服务的保存的文件夹名称(建议唯一)
	 * @param response
	 *            HttpServletResponse
	 * 
	 * 有JSON对象返回 msg
	 */

	public static void fileUpload(FormFile file, String fileName,
			String folder, HttpServletResponse response)
	{
		InputStream in;
		Properties properties;
		StringBuilder builderDir;

		JSONObject json_obj = new JSONObject();
		try
		{
			if (null != fileName && !"".equals(fileName))
			{
				in = FileTransferUtil.class.getClassLoader()
						.getResourceAsStream("file.properties");

				properties = new Properties();
				properties.load(in);

				builderDir = new StringBuilder();
				builderDir.append(System.getProperty("catalina.home"));
				builderDir.append(properties.getProperty("uploadDir"));
				builderDir.append("/");
				builderDir.append(folder);

				InputStream ins = file.getInputStream();
				File folderDir = new File(builderDir.toString());
				if (!folderDir.exists())
				{
					folderDir.mkdirs();
				}

				File f = new File(folderDir, fileName);

				FileOutputStream fos = new FileOutputStream(f);

				byte[] buff = new byte[MAXSIZE];

				int buffSize = 0;
				while ((buffSize = ins.read(buff)) != -1)
				{
					fos.write(buff, 0, buffSize);
				}

				ins.close();
				fos.flush();
				fos.close();
				file.destroy();

				json_obj.element("msg", "您已上传成功!");
			}
		}
		catch (FileNotFoundException e)
		{
			json_obj.element("msg", "上传失败!");
			LoggerUtil.loggerInfo(FileTransferUtil.class, e);
		}
		catch (IOException e)
		{
			json_obj.element("msg", "上传失败!");
			LoggerUtil.loggerInfo(FileTransferUtil.class, e);
		}
		try
		{
			response.getWriter().print(json_obj.toString());
		}
		catch (IOException e)
		{
			LoggerUtil.loggerInfo(FileTransferUtil.class, e);
		}
	}

	/**
	 * 文件下载工具方法
	 * 
	 * @param fileName
	 *            需下载的文件的文件名
	 * @param save
	 *            下载后保存到本地的文件名
	 * @param folder
	 *            文件保存在服务器上的文件夹的名称
	 * @param response
	 *            HttpServletResponse
	 * @throws IOException
	 */

	public static void downLoad(String fileName, String saveName,
			String folder, HttpServletResponse response)
	{
		StringBuilder builderDir = null;
		InputStream fis = null;
		BufferedInputStream bis = null;
		OutputStream os = null;
		BufferedOutputStream bos = null;

		if (null != fileName && !"".equals(fileName) && null != folder
				&& !"".equals(folder))
		{
			Properties properties = propertiesRead(FileTransferUtil.class,
					"file.properties");

			builderDir = new StringBuilder();
			builderDir.append(System.getProperty("catalina.home"));
			builderDir.append(properties.getProperty("uploadDir"));
			builderDir.append("/");
			builderDir.append(folder);
			builderDir.append("/");
			builderDir.append(fileName);

			File file = new File(builderDir.toString());
			if (file.exists() && file.isFile())
			{
				try
				{
					fis = new FileInputStream(file);
					bis = new BufferedInputStream(fis);// 放到缓冲流里面

					os = response.getOutputStream();// 获取文件输出IO流
					bos = new BufferedOutputStream(os);
					// 清空response
					response.reset();
					response.setContentType("application/x-download");

					// 设置response内容的类型
					response.setHeader("Content-disposition",
							"attachment;filename="
									+ URLEncoder.encode(saveName, "UTF-8"));// 设置头部信息
					int bytesRead = 0;
					byte[] buffer = new byte[MAXSIZE];
					// 开始向网络传输文件流
					while ((bytesRead = bis.read(buffer)) != -1)
					{
						bos.write(buffer, 0, bytesRead);
					}
				}
				catch (Exception e)
				{
					LoggerUtil.loggerInfo(FileTransferUtil.class, e);
				}
				finally
				{
					if (null != bis)
					{
						try
						{
							fis.close();
						}
						catch (IOException e)
						{
							e.printStackTrace();
						}
					}
					if (null != bos)
					{
						try
						{
							bos.flush();
							bos.close();
						}
						catch (IOException e)
						{
							e.printStackTrace();
						}
					}
				}
			}
		}
	}

	/**
	 * 删除服务器上的文件
	 * @param fileName 完整的文件名称
	 * @param folder 文件所在文件夹名称
	 */
	public static void delFile(String fileName, String folder)
	{
		StringBuilder builderDir = null;

		if (null != fileName && !"".equals(fileName) && null != folder
				&& !"".equals(folder))
		{
			Properties properties = propertiesRead(FileTransferUtil.class,
					"file.properties");
			builderDir = new StringBuilder();
			builderDir.append(System.getProperty("catalina.home"));
			builderDir.append(properties.getProperty("uploadDir"));
			builderDir.append("/");
			builderDir.append(folder);
			builderDir.append("/");
			builderDir.append(fileName);

			File file = new File(builderDir.toString());
			if (file.exists())
			{
				file.delete();
			}
		}
	}

	/**
	 * 读取properties文件
	 * 
	 * @param clazz
	 *            xxx.class 类名.class
	 * @param propertiesName
	 *            xxx.properties 整个properties文件的文件名加后缀
	 */
	public static Properties propertiesRead(Class clazz, String propertiesName)
	{
		Properties properties;
		InputStream in;
		in = clazz.getClassLoader().getResourceAsStream(propertiesName);

		properties = new Properties();
		try
		{
			properties.load(in);
		}
		catch (IOException e)
		{
			LoggerUtil.loggerInfo(FileTransferUtil.class, e);
		}
		return properties;
	}

	/**
	 * 根据fileSize返回文件实际可读大小
	 * 
	 * @param size
	 * @return
	 */
	public static String getFileSize(int SIZE)
	{
		double size = (double) SIZE;
		double B = 1;
		double KB = 1024;// 1Kb
		double MB = 1024 * 1024;// 1Mb
		double GB = 1024 * 1024 * 1024;// 1Gb
		String str = "0";
		DecimalFormat df = new DecimalFormat("####.0");
		if (size > 0)
		{
			if (size / KB < 1024d)// 如果小于1M
			{
				if ((size / KB) < 1)
				{
					str = "0" + df.format(size / KB) + "KB";
				}
				else
				{
					str = df.format(size / KB) + "KB";
				}
			}
			else if ((size / KB >= 1024d) && (size / KB < 1024d * 1024d))// 如果size>=1M
																			// <1024M
			{
				str = df.format((size / MB)) + "MB";
			}
			else if (size / KB >= 1024d * 1024d)// 如果大于1024M
			{
				str = df.format((size / GB)) + "G";
			}
		}
		return str;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值