package com.shove.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.shove.vo.FileCommon; import com.shove.vo.Files; import com.shove.web.util.VerifyTruePicture; public class UploadUtil { public static Log log = LogFactory.getLog(UploadUtil.class); /** * 上传文件公共方法 * @param file 文件 * @param source 路径 * @param fileName 文件名 * @throws Exception */ public static void uploadByFile(File file,String source,String fileName) throws Exception{ FileInputStream fis = null; FileOutputStream fos = null; try { if(file.length()==0){ File _file = new File(source + fileName); _file.createNewFile(); return ; } fis = new FileInputStream(file); fos = new FileOutputStream(source + "/" + fileName); //读取字节流 byte[] bt = new byte[1024]; int real = fis.read(bt); while (real > 0) { fos.write(bt, 0, real); real = fis.read(bt); } } finally { fos.flush(); fos.close(); fis.close(); } } /** * @param file开发人员设置需要设置的参数(对象) * @param fileCommon 文件参数(对象) * @return Map * @throws Exception */ @SuppressWarnings("unchecked") public static String getByAllParams(Files file, FileCommon fileCommon,String realpath) throws Exception { //取真实文件名 String fileName = file.getFilesFileName(); String getExt = findFileNameExt(fileName); //若指定了文件名,以指定的文件名,否则以原文件名。 // if (!StringUtils.isBlank(fileCommon.getFileName())) { // fileName = fileCommon.getFileName() + "." + getExt; // } File f = file.getFiles(); if (f.exists()) { //String filetype1 = VerifyTruePicture.getImageFileType(f); //System.out.println(filetype1); String filetype2 = VerifyTruePicture.getFileByFile(f); //System.out.println(filetype2); if(filetype2==null) { return "上传文件类型错误!"; } } else { return "请选择上传文件!"; } fileName = FileUtils.getFileName() + "." + getExt; //传回前台页面使用 fileCommon.setFileName(fileName); if(StringUtils.isBlank(fileCommon.getFileSource())){ return "请选择上传文件!"; } /*//若指定了类型,则进行检查 if (StringUtils.isNotBlank(fileCommon.getFileType())) { if (!fileCommon.getFileType().toUpperCase().contains(getExt.toUpperCase())) { return "文件类型不对!"; } } //若禁止类型,则进行检查 String notAllowFileType = fileCommon.getNotAllowFileType(); if (StringUtils.isNotBlank(notAllowFileType)) { if (notAllowFileType.toUpperCase().contains(getExt.toUpperCase())) { return "禁止上传"+notAllowFileType+"类型的文件!"; } }*/ //stone modify by 2013-11-13 if (!"GIF,JPG,JPEG,PNG,BMP".contains(getExt.toUpperCase())) { return "文件类型不对!"; } //若指定了大小限制,则进行检查 double fileLimitSize = Double.parseDouble(fileCommon.getFileLimitSize()); if(fileLimitSize > 0){ long getFileSize = 0L; if(fileCommon.getSizeUnit().equalsIgnoreCase("M")){ getFileSize = new Double(fileLimitSize * 1024 * 1024).longValue(); } if(fileCommon.getSizeUnit().equalsIgnoreCase("K")){ getFileSize = new Double(fileLimitSize * 1024).longValue() ; } if (file.getFiles().length() > getFileSize) { return "文件超过上传限制!"; } } //若已存在同名文件,就先删除 deleteFile(realpath,fileName); try { //上传文件 UploadUtil.uploadByFile(file.getFiles(), realpath ,fileName); } catch (Exception e) { log.error(e); return "上传路径不存在!"; } return null; } /** * 若有重复文件,删除已存在的文件 * @param source * @param fileName */ public static void deleteFile(String parent,String fileName){ parent=parent.replace("/", File.separator); File f=new File(parent,fileName); if(f!=null && f.exists() && f.isFile()){ f.delete(); } } /** * 获取文件名后缀 * 李红志 Nov 25, 2010 * @param fileName * @return */ public static String findFileNameExt(String fileName) { if(fileName==null || "".equals(fileName)){ return null; } return fileName.substring(fileName.lastIndexOf(".")+1); } /** * 删除文件 * @param th 文件路径 * @param fileName 文件名 * @throws Exception */ public static void removeFile(String parent, String fileName){ log.info(parent+fileName); File file = new File(parent, fileName); if (file!=null&&file.exists()&&file.isFile()) { file.delete(); } } }