package cn.edu.hbcf.common.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.UUID;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import cn.edu.hbcf.common.jackjson.JackJson;
import cn.edu.hbcf.common.vo.ExtReturn;
public class FileDownLoadUtils {
private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);
/**
*
* @param filePath
* @param fileName
* @param response
*/
public static void downloadFile(String filePath,String fileName,HttpServletResponse response){
InputStream input = null;
ServletOutputStream output = null;
try {
File downloadFile = new File(filePath);
// 判断文件夹是否存在,不存在则创建
if (!downloadFile.getParentFile().exists()) {
downloadFile.getParentFile().mkdirs();
}
// 判断是否存在这个文件
if (!downloadFile.isFile()) {
// 创建一个
FileUtils.touch(downloadFile);
}
//response.setContentType("application/octet-stream;charset=UTF-8");
response.setContentType("application/x-download");
response.setCharacterEncoding("UTF-8");
// response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));
//解决中文乱码
response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso-8859-1").replace(" ", "_"));
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
try {
if(output != null){
output.flush();
output.close();
}
if(input != null){
input.close();
}
} catch (IOException e) {
e.printStackTrace();
}
// IOUtils.closeQuietly(output);
// IOUtils.closeQuietly(input);
}
}
public static String fileUpload(MultipartFile file, HttpServletRequest request,String saveFolder,long maxSize){
String returnMsg = null;
try {
// 保存的地址
String savePath = request.getSession().getServletContext().getRealPath("/"+saveFolder);
if(maxSize!=0 && file.getSize()>maxSize){
returnMsg = JackJson.fromObjectToJson(new ExtReturn(false, "文件大小超过了"+maxSize/(1024*1024)+"M了,上传失败!"));
return returnMsg;
}
// 上传的文件名 //需要保存
String uploadFileName = file.getOriginalFilename();
// 获取文件后缀名 //需要保存
String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
// 以年月/天的格式来存放
String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
// uuid来保存不会重复
String saveName = UUID.randomUUID().toString().replace("-", "");
// 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
// 为了安全,不要加入后缀名
// \2011-12\01\8364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
String finalPath = File.separator + dataPath + File.separator + saveName + ("".equals(fileType) ? "" : "." + fileType);
logger.debug("savePath:{},finalPath:{}", new Object[] { savePath, finalPath });
File saveFile = new File(savePath + finalPath);
// 判断文件夹是否存在,不存在则创建
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
// 写入文件
FileUtils.writeByteArrayToFile(saveFile, file.getBytes());
// 保存文件的基本信息到数据库
StringBuffer buffer = new StringBuffer();
buffer.append("{success:true,fileInfo:{'fileName':'").append(uploadFileName).append("',");
buffer.append("'filePath':'").append(savePath.replace("\\", "/")+finalPath.replace("\\", "/")).append("',");
buffer.append("'projectPath':'").append(saveFolder.replace("\\", "/")).append(finalPath.replace("\\", "/")).append("',");
buffer.append("'storeName':'").append(saveName + ("".equals(fileType) ? "" : "." + fileType));
buffer.append("'}}");
returnMsg = buffer.toString();
} catch (Exception e) {
logger.error("Exception: ", e);
}
return returnMsg;
}
public static File upload(MultipartFile file,String saveFolder){
File f = null;
try {
// 上传的文件名 //需要保存
String uploadFileName = file.getOriginalFilename();
// 获取文件后缀名 //需要保存
String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
// 以年月/天的格式来存放
// String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
// uuid来保存不会重复
String saveName = UUID.randomUUID().toString().replace("-", "");
// 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
// 为了安全,不要加入后缀名
// \2011-12\01\8364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
String finalPath = saveFolder + saveName + ("".equals(fileType) ? "" : "." + fileType);
logger.debug("finalPath:{}", new Object[] { finalPath });
File saveFile = new File(finalPath);
// 判断文件夹是否存在,不存在则创建
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
// 写入文件
FileUtils.writeByteArrayToFile(saveFile, file.getBytes());
f = new File(finalPath.replace("\\", "/"));
} catch (Exception e) {
logger.error("Exception: ", e);
}
return f;
}
public static File upload(MultipartFile file, HttpServletRequest request,String saveFolder){
File f = null;
try {
// 保存的地址
String savePath = request.getSession().getServletContext().getRealPath("/");
if(saveFolder != null){
savePath += saveFolder;
}
// 上传的文件名 //需要保存
String uploadFileName = file.getOriginalFilename();
// 获取文件后缀名 //需要保存
String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
// 以年月/天的格式来存放
// String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
// uuid来保存不会重复
String saveName = UUID.randomUUID().toString().replace("-", "");
// 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
// 为了安全,不要加入后缀名
// \2011-12\01\8364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
String finalPath = File.separator + saveName + ("".equals(fileType) ? "" : "." + fileType);
logger.debug("savePath:{},finalPath:{}", new Object[] { savePath, finalPath });
f = new File(savePath + finalPath);
// 判断文件夹是否存在,不存在则创建
if (!f.getParentFile().exists()) {
f.getParentFile().mkdirs();
}
// 写入文件
FileUtils.writeByteArrayToFile(f, file.getBytes());
// f = new File(savePath.replace("\\", "/")+finalPath.replace("\\", "/"));
} catch (Exception e) {
logger.error("Exception: ", e);
}
return f;
}
/**
* 创建文件夹
* @param request
* @param saveFolder
* @return
*/
public static File createFile(HttpServletRequest request,String saveFolder){
// 保存的地址
String savePath = request.getSession().getServletContext().getRealPath("/");
if(saveFolder != null){
savePath += saveFolder;
}
File file=new File(savePath);
// 判断文件夹是否存在,不存在则创建
if (!file.exists()) {
file.mkdirs();
}
return file;
}
}