/** * 保存一个上传的文件。 * * @param formFile 上传的文件对象. * @param relRootPath 文件保存的目录, 如果目录不存在,将自动创建该目录 * @param limitFileSize 上传文件的最大限制,等于0时表示不限制。单位(kb) * @param renameUploadFilie 是否重命名原始上传文件名 * @return 成功,返回保存后的文件信息(二维数组), * [0]:文件大小(kb),保留两位小数, [1]:文件相对根目录文件名,如:tmp/abc.txt * 否则,返回null时表示参数错误,返回数组[0]为负数时,表示出错,数组[1]为出错信息. */ public static String[] saveUploadFile(FileItem formFile, String relRootPath, int limitFileSize, boolean renameUploadFilie) { if(formFile == null) { return null; } long fileSize = formFile.getSize(); String fileName = formFile.getName(); //上传文件的文件名 if(fileName.trim().length() == 0) { return new String[]{"-1", "没有指定上传文件"}; } fileName = fileName.replaceAll("", "/"); if(limitFileSize > 0) { if(fileSize > limitFileSize * 1024) //文件超过限定大小 { return new String[]{"-2", "上传文件过大"}; } } File file = new File(SysConstants.REAL_PATH + relRootPath);//判断目录是否存在 if(!file.exists()) { file.mkdirs(); } String fileNewName; String relativePath = null; InputStream input = null; FileOutputStream output = null; try { if(renameUploadFilie)//重命名文件 { fileNewName = SysUtils.getDateTime(new Date(), "yyyyMMddHHmmsssss"); int dotIndex = fileName.lastIndexOf("."); if(dotIndex >= 0) { fileNewName += fileName.substring(dotIndex, fileName.length()); } } else { int dotIndex = fileName.lastIndexOf("/"); if(dotIndex >= 0) //如果文件名是全路径 { fileNewName = fileName.substring(dotIndex + 1, fileName.length()); } else { fileNewName = fileName; } } relativePath = relRootPath + "/" + fileNewName; file = new File(SysConstants.REAL_PATH + relativePath); if(file.exists()) //如果文件存在,则删除先 { file.delete(); } input = formFile.getInputStream(); output = new FileOutputStream(file); int bytesRead; byte[] buffer = new byte[8192]; while((bytesRead = input.read(buffer, 0, 8192)) != -1) { output.write(buffer, 0, bytesRead); } } catch(Exception e) { return new String[]{"-3", "上传文件出错"}; } finally { try { if(input != null) input.close(); } catch(IOException e) { log.error(e); } try { if(output != null) output.close(); } catch(IOException e) { log.error(e); } } float sizeKB = fileSize * 1000 / 1024f; float newSize = ((int) sizeKB) / 1000f; return new String[]{String.valueOf(newSize), relativePath}; }