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;
}
}
文件上传下载删除工具类
最新推荐文章于 2020-07-13 19:00:26 发布