|  | 
 
| 对于action模板中的upload方法,建议从模板中删掉,将代码移入BaseAction,包括如下代码: 
 /**
 * 文件上传
 */
 public void upload() {
 String savePath = ServletActionContext.getServletContext().getRealPath(
 "/")
 + ResourceUtil.getUploadDirectory() + "/";// 文件保存目录路径
 String saveUrl = "/" + ResourceUtil.getUploadDirectory() + "/";// 文件保存目录URL
 String contentDisposition = ServletActionContext.getRequest()
 .getHeader("Content-Disposition");// 如果是HTML5上传文件,那么这里有相应头的
 if (contentDisposition != null) {// HTML5拖拽上传文件
 Long fileSize = Long.valueOf(ServletActionContext.getRequest()
 .getHeader("Content-Length"));// 上传的文件大小
 String fileName = contentDisposition.substring(contentDisposition
 .lastIndexOf("filename=\""));// 文件名称
 fileName = fileName.substring(fileName.indexOf("\"") + 1);
 fileName = fileName.substring(0, fileName.indexOf("\""));
 ServletInputStream inputStream;
 try {
 inputStream = ServletActionContext.getRequest()
 .getInputStream();
 } catch (IOException e) {
 uploadError("上传文件出错!");
 ExceptionUtil.getExceptionMessage(e);
 return;
 }
 if (inputStream == null) {
 uploadError("您没有上传任何文件!");
 return;
 }
 if (fileSize > ResourceUtil.getUploadFileMaxSize()) {
 uploadError("上传文件超出限制大小!", fileName);
 return;
 }
 // 检查文件扩展名
 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1)
 .toLowerCase();
 if (!Arrays.<String> asList(
 ResourceUtil.getUploadFileExts().split(",")).contains(
 fileExt)) {
 uploadError("上传文件扩展名是不允许的扩展名。\n只允许"
 + ResourceUtil.getUploadFileExts() + "格式!");
 return;
 }
 savePath += fileExt + "/";
 saveUrl += fileExt + "/";
 SimpleDateFormat yearDf = new SimpleDateFormat("yyyy");
 SimpleDateFormat monthDf = new SimpleDateFormat("MM");
 SimpleDateFormat dateDf = new SimpleDateFormat("dd");
 Date date = new Date();
 String ymd = yearDf.format(date) + "/" + monthDf.format(date) + "/"
 + dateDf.format(date) + "/";
 savePath += ymd;
 saveUrl += ymd;
 File uploadDir = new File(savePath);// 创建要上传文件到指定的目录
 if (!uploadDir.exists()) {
 uploadDir.mkdirs();
 }
 String newFileName = UUID.randomUUID().toString()
 .replaceAll("-", "")
 + "." + fileExt;// 新的文件名称
 File uploadedFile = new File(savePath, newFileName);
 try {
 FileCopyUtils.copy(inputStream, new FileOutputStream(
 uploadedFile));
 } catch (FileNotFoundException e) {
 uploadError("上传文件出错!");
 ExceptionUtil.getExceptionMessage(e);
 return;
 } catch (IOException e) {
 uploadError("上传文件出错!");
 ExceptionUtil.getExceptionMessage(e);
 return;
 }
 uploadSuccess(ServletActionContext.getRequest().getContextPath()
 + saveUrl + newFileName, fileName, 0);// 文件上传成功
 return;
 }
 MultiPartRequestWrapper multiPartRequest = (MultiPartRequestWrapper) ServletActionContext
 .getRequest();// 由于struts2上传文件时自动使用了request封装
 File[] files = multiPartRequest.getFiles(ResourceUtil
 .getUploadFieldName());// 上传的文件集合
 String[] fileNames = multiPartRequest.getFileNames(ResourceUtil
 .getUploadFieldName());// 上传文件名称集合
 if (files == null || files.length < 1) {
 uploadError("您没有上传任何文件!");
 return;
 }
 for (int i = 0; i < files.length; i++) {// 循环所有文件
 File file = files;// 上传的文件(临时文件)
 String fileName = fileNames;// 上传文件名
 if (file.length() > ResourceUtil.getUploadFileMaxSize()) {
 uploadError("上传文件超出限制大小!", fileName);
 return;
 }
 // 检查文件扩展名
 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1)
 .toLowerCase();
 if (!Arrays.<String> asList(
 ResourceUtil.getUploadFileExts().split(",")).contains(
 fileExt)) {
 uploadError("上传文件扩展名是不允许的扩展名。\n只允许"
 + ResourceUtil.getUploadFileExts() + "格式!");
 return;
 }
 savePath += fileExt + "/";
 saveUrl += fileExt + "/";
 SimpleDateFormat yearDf = new SimpleDateFormat("yyyy");
 SimpleDateFormat monthDf = new SimpleDateFormat("MM");
 SimpleDateFormat dateDf = new SimpleDateFormat("dd");
 Date date = new Date();
 String ymd = yearDf.format(date) + "/" + monthDf.format(date) + "/"
 + dateDf.format(date) + "/";
 savePath += ymd;
 saveUrl += ymd;
 File uploadDir = new File(savePath);// 创建要上传文件到指定的目录
 if (!uploadDir.exists()) {
 uploadDir.mkdirs();
 }
 String newFileName = UUID.randomUUID().toString()
 .replaceAll("-", "")
 + "." + fileExt;// 新的文件名称
 File uploadedFile = new File(savePath, newFileName);
 try {
 FileCopyUtils.copy(file, uploadedFile);// 利用spring的文件工具上传
 } catch (Exception e) {
 uploadError("上传文件失败!", fileName);
 return;
 }
 uploadSuccess(ServletActionContext.getRequest().getContextPath()
 + saveUrl + newFileName, fileName, i);// 文件上传成功
 }
 }
 private void uploadError(String err, String msg) {
 Map<String, Object> m = new HashMap<String, Object>();
 m.put("err", err);
 m.put("msg", msg);
 writeJson(m);
 }
 private void uploadError(String err) {
 uploadError(err, "");
 }
 private void uploadSuccess(String newFileName, String fileName, int id) {
 Map<String, Object> m = new HashMap<String, Object>();
 m.put("err", "");
 Map<String, Object> nm = new HashMap<String, Object>();
 nm.put("url", newFileName);
 nm.put("localfile", fileName);
 nm.put("id", id);
 m.put("msg", nm);
 writeJson(m);
 }
 
 | 
 |