diff --git a/src/main/java/org/jeecgframework/core/servlet/Uploader.java b/src/main/java/org/jeecgframework/core/servlet/Uploader.java new file mode 100644 index 00000000..687d00fa --- /dev/null +++ b/src/main/java/org/jeecgframework/core/servlet/Uploader.java @@ -0,0 +1,377 @@ +package org.jeecgframework.core.servlet; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; + +import javax.servlet.http.HttpServletRequest; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.fileupload.FileItemIterator; +import org.apache.commons.fileupload.FileItemStream; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.io.IOUtils; + + +/** + * UEditor文件上传辅助类 + * + */ +public class Uploader { + + // 文件大小常量, 单位kb + private static final int MAX_SIZE = 500 * 1024; + // 输出文件地址 + private String url = ""; + // 上传文件名 + private String fileName = ""; + // 状态 + private String state = ""; + // 文件类型 + private String type = ""; + // 原始文件名 + private String originalName = ""; + // 文件大小 + private String size = ""; + + private HttpServletRequest request = null; + private String title = ""; + + // 保存路径 + private String savePath = "upload"; + // 文件允许格式 + private String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf", + ".txt", ".swf", ".wmv", ".gif", ".png", ".jpg", ".jpeg", ".bmp" }; + // 文件大小限制,单位Byte + private long maxSize = 0; + + private HashMap errorInfo = new HashMap(); + private Map params = null; + // 上传的文件数据 + private InputStream inputStream = null; + + public static final String ENCODEING = System.getProperties().getProperty("file.encoding"); + + public Uploader(HttpServletRequest request) { + this.request = request; + this.params = new HashMap(); + + this.setMaxSize(Uploader.MAX_SIZE); + + HashMap tmp = this.errorInfo; + tmp.put("SUCCESS", "SUCCESS"); // 默认成功 + // 未包含文件上传域 + tmp.put("NOFILE", + "\\u672a\\u5305\\u542b\\u6587\\u4ef6\\u4e0a\\u4f20\\u57df"); + // 不允许的文件格式 + tmp.put("TYPE", + "\\u4e0d\\u5141\\u8bb8\\u7684\\u6587\\u4ef6\\u683c\\u5f0f"); + // 文件大小超出限制 + tmp.put("SIZE", + "\\u6587\\u4ef6\\u5927\\u5c0f\\u8d85\\u51fa\\u9650\\u5236"); + // 请求类型错误 + tmp.put("ENTYPE", "\\u8bf7\\u6c42\\u7c7b\\u578b\\u9519\\u8bef"); + // 上传请求异常 + tmp.put("REQUEST", "\\u4e0a\\u4f20\\u8bf7\\u6c42\\u5f02\\u5e38"); + // 未找到上传文件 + tmp.put("FILE", "\\u672a\\u627e\\u5230\\u4e0a\\u4f20\\u6587\\u4ef6"); + // IO异常 + tmp.put("IO", "IO\\u5f02\\u5e38"); + // 目录创建失败 + tmp.put("DIR", "\\u76ee\\u5f55\\u521b\\u5efa\\u5931\\u8d25"); + // 未知错误 + tmp.put("UNKNOWN", "\\u672a\\u77e5\\u9519\\u8bef"); + + this.parseParams(); + + } + + public void upload() throws Exception { + boolean isMultipart = ServletFileUpload + .isMultipartContent(this.request); + if (!isMultipart) { + this.state = this.errorInfo.get("NOFILE"); + return; + } + + if (this.inputStream == null) { + this.state = this.errorInfo.get("FILE"); + return; + } + + // 存储title + this.title = this.getParameter("pictitle"); + + try { + String savePath = this.getFolder(this.savePath); + + if (!this.checkFileType(this.originalName)) { + this.state = this.errorInfo.get("TYPE"); + return; + } + + this.fileName = this.getName(this.originalName); + this.type = this.getFileExt(this.fileName); + this.url = savePath + "/" + this.fileName; + + FileOutputStream fos = new FileOutputStream( + this.getPhysicalPath(this.url)); + BufferedInputStream bis = new BufferedInputStream(this.inputStream); + byte[] buff = new byte[128]; + int count = -1; + + while ((count = bis.read(buff)) != -1) { + + fos.write(buff, 0, count); + + } + + bis.close(); + fos.close(); + + this.state = this.errorInfo.get("SUCCESS"); + } catch (Exception e) { + e.printStackTrace(); + this.state = this.errorInfo.get("IO"); + } + + } + + /** + * 接受并保存以base64格式上传的文件 + * + * @param fieldName + */ + public void uploadBase64(String fieldName) { + String savePath = this.getFolder(this.savePath); + String base64Data = this.request.getParameter(fieldName); + this.fileName = this.getName("test.png"); + this.url = savePath + "/" + this.fileName; + Base64 decoder=new Base64(); + + try { + File outFile = new File(this.getPhysicalPath(this.url)); + OutputStream ro = new FileOutputStream(outFile); + byte[] b = decoder.encode(base64Data.getBytes()); + for (int i = 0; i < b.length; ++i) { + if (b[i] < 0) { + b[i] += 256; + } + } + ro.write(b); + ro.flush(); + ro.close(); + this.state = this.errorInfo.get("SUCCESS"); + } catch (Exception e) { + this.state = this.errorInfo.get("IO"); + } + } + + public String getParameter(String name) { + + return this.params.get(name); + + } + + /** + * 文件类型判断 + * + * @param fileName + * @return + */ + private boolean checkFileType(String fileName) { + Iterator type = Arrays.asList(this.allowFiles).iterator(); + while (type.hasNext()) { + String ext = type.next(); + if (fileName.toLowerCase().endsWith(ext)) { + return true; + } + } + return false; + } + + /** + * 获取文件扩展名 + * + * @return string + */ + private String getFileExt(String fileName) { + return fileName.substring(fileName.lastIndexOf(".")); + } + + private void parseParams() { + + DiskFileItemFactory dff = new DiskFileItemFactory(); + try { + ServletFileUpload sfu = new ServletFileUpload(dff); + sfu.setSizeMax(this.maxSize); + sfu.setHeaderEncoding(Uploader.ENCODEING); + + FileItemIterator fii = sfu.getItemIterator(this.request); + + while (fii.hasNext()) { + FileItemStream item = fii.next(); + // 普通参数存储 + if (item.isFormField()) { + + this.params.put(item.getFieldName(), + this.getParameterValue(item.openStream())); + + } else { + + // 只保留一个 + if (this.inputStream == null) { + this.inputStream = item.openStream(); + this.originalName = item.getName(); + return; + } + + } + + } + + } catch (Exception e) { + this.state = this.errorInfo.get("UNKNOWN"); + } + + } + + /** + * 依据原始文件名生成新文件名 + * + * @return + */ + private String getName(String fileName) { + Random random = new Random(); + return this.fileName = "" + random.nextInt(10000) + + System.currentTimeMillis() + this.getFileExt(fileName); + } + + /** + * 根据字符串创建本地目录 并按照日期建立子目录返回 + * + * @param path + * @return + */ + private String getFolder(String path) { + SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd"); + path += "/" + formater.format(new Date()); + System.out.println(" - image path - "+ path); + File dir = new File(this.getPhysicalPath(path)); + if (!dir.exists()) { + try { + dir.mkdirs(); + } catch (Exception e) { + this.state = this.errorInfo.get("DIR"); + return ""; + } + } + return path; + } + + /** + * 根据传入的虚拟路径获取物理路径 + * + * @param path + * @return + */ + private String getPhysicalPath(String path) { + String servletPath = this.request.getServletPath(); + String realPath = this.request.getSession().getServletContext() + .getRealPath(servletPath); + //update-begin--author:scott--date:20160628----for:变更UE编辑器上传路径到upload目录下------ + String newUrl = new File(realPath).getParent().replace("\\content\\plug-in\\ueditor\\jsp", "") + "/" + path; + //update-end--author:scott--date:20160628----for:变更UE编辑器上传路径到upload目录下------ + return newUrl; + } + + /** + * 从输入流中获取字符串数据 + * + * @param in + * 给定的输入流, 结果字符串将从该流中读取 + * @return 从流中读取到的字符串 + */ + private String getParameterValue(InputStream in) { + + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + + String result = ""; + String tmpString = null; + + try { + + while ((tmpString = reader.readLine()) != null) { + result += tmpString; + } + + } catch (Exception e) { + // do nothing + } + + return result; + + } + + private byte[] getFileOutputStream(InputStream in) { + + try { + return IOUtils.toByteArray(in); + } catch (IOException e) { + return null; + } + + } + + public void setSavePath(String savePath) { + this.savePath = savePath; + } + + public void setAllowFiles(String[] allowFiles) { + this.allowFiles = allowFiles; + } + + public void setMaxSize(long size) { + this.maxSize = size * 1024; + } + + public String getSize() { + return this.size; + } + + public String getUrl() { + return this.url; + } + + public String getFileName() { + return this.fileName; + } + + public String getState() { + return this.state; + } + + public String getTitle() { + return this.title; + } + + public String getType() { + return this.type; + } + + public String getOriginalName() { + return this.originalName; + } +} \ No newline at end of file diff --git a/src/main/webapp/plug-in/ueditor/jsp/fileUp.jsp b/src/main/webapp/plug-in/ueditor/jsp/fileUp.jsp index 420446b9..021910b0 100644 --- a/src/main/webapp/plug-in/ueditor/jsp/fileUp.jsp +++ b/src/main/webapp/plug-in/ueditor/jsp/fileUp.jsp @@ -1,7 +1,7 @@ <%@page import="java.io.File"%> <%@page import="java.util.Properties"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> - <%@ page import="weixin.guanjia.message.controller.Uploader" %> + <%@ page import="org.jeecgframework.core.servlet.Uploader" %> <%@ page import="java.io.FileInputStream" %> diff --git a/src/main/webapp/plug-in/ueditor/jsp/getRemoteImage.jsp b/src/main/webapp/plug-in/ueditor/jsp/getRemoteImage.jsp index 29946fa3..43510ca9 100644 --- a/src/main/webapp/plug-in/ueditor/jsp/getRemoteImage.jsp +++ b/src/main/webapp/plug-in/ueditor/jsp/getRemoteImage.jsp @@ -2,7 +2,7 @@ <%@ page import="java.io.*"%> <%@ page import="java.net.*"%> <%@ page import="java.util.*"%> - <%@ page import="weixin.guanjia.message.controller.Uploader" %> + <%@ page import="org.jeecgframework.core.servlet.Uploader" %> <% request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); diff --git a/src/main/webapp/plug-in/ueditor/jsp/scrawlUp.jsp b/src/main/webapp/plug-in/ueditor/jsp/scrawlUp.jsp index dd0ca115..1de95e75 100644 --- a/src/main/webapp/plug-in/ueditor/jsp/scrawlUp.jsp +++ b/src/main/webapp/plug-in/ueditor/jsp/scrawlUp.jsp @@ -9,7 +9,7 @@ <%@ page import="java.io.File"%> <%@ page import="java.io.FileOutputStream"%> <%@ page import="java.util.Date"%> - <%@ page import="weixin.guanjia.message.controller.Uploader" %> + <%@ page import="org.jeecgframework.core.servlet.Uploader" %> <% request.setCharacterEncoding("utf-8"); diff --git a/src/main/webapp/webpage/main/hplushome.jsp b/src/main/webapp/webpage/main/hplushome.jsp index 63b629e8..9bf7468d 100644 --- a/src/main/webapp/webpage/main/hplushome.jsp +++ b/src/main/webapp/webpage/main/hplushome.jsp @@ -136,24 +136,28 @@
- v3.6.52016.07.01 + v3.6.52016.07.18
此版本云应用插件开发版本,支持以插件方式升级平台功能,让我们共同期待后续版本的到来
    -
  1. Jeecg3.6.4稳定升级包,简化功能;
  2. -
  3. 我的邮箱采用插件开发实现;
  4. +
  5. Jeecg3.6.4稳定升级版,精简功能;
  6. +
  7. 我的邮箱插件功能;
  8. 用户锁定提示信息不准确修复;
  9. 通过组织机构查看不到用户;
  10. -
  11. online生成器用户自定义模板支持;
  12. +
  13. Online代码生成器,支持自定义模板;
  14. +
  15. Online代码生成器,单表生成支持java增强、sql增强、js增强、自定义按钮、自定义操作;
  16. 删掉 OpenLayers-2.11、我的邮箱,在线文档的功能;
  17. 多数据源,数据库密码进行加密存储;
  18. -
  19. JEECG云应用平台中心发布:http://yun.jeecg.org
  20. +
  21. datagrid查询条件增加默认值属性;
  22. +
  23. 百度UE编辑器,上传问题解决;
  24. +
  25. 提供mysql、oracle11g、SqlServer2005脚本;
  26. 插件发布:我的邮箱
  27. 插件发布:CMS系统
  28. 插件发布:微信企业号管理平台
  29. +
  30. JEECG云插件下载地址:http://yun.jeecg.org
  31. 更多插件发布,敬请期待。。