public class UploadFileServlet extends HttpServlet {

// \attached\

private static String baseFileDir = File.separator + "attached"

+ File.separator;// 上传文件存储目录

// /attached/

private static String baseURLDir = "/attached/";// 上传文件目录URL

// 可以上传的文件类型

private static String fileExt = "jpg,jpeg,bmp,gif,png";

private static Long maxSize = 0l;

// 0:不建目录 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存

private static String dirType = "1";

/**

* 文件上传初始化工作

*/

public void init() throws ServletException {

/* 获取文件上传存储的相对路径 */

// 如果配置文件中的baseDir不为空,就以配置文件为主,否则使用上文定义的地址

if (!StringUtils.isBlank(this.getInitParameter("baseDir"))) {

baseFileDir = this.getInitParameter("baseDir");

}

// 拿到baseFileDir的绝对路径

// E:\workspace\sts\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\HTMLEditor\attached

String realBaseDir = this.getServletConfig().getServletContext()

.getRealPath(baseFileDir);

File baseFile = new File(realBaseDir);

// 如果工程中不存在attached文件夹,则创建

if (!baseFile.exists()) {

baseFile.mkdir();

}

/* 获取文件类型参数 */

fileExt = this.getInitParameter("fileExt");

if (StringUtils.isBlank(fileExt))

fileExt = "jpg,jpeg,gif,bmp,png";

/* 获取文件大小参数 */

String maxSize_str = this.getInitParameter("maxSize");

if (StringUtils.isNotBlank(maxSize_str))

maxSize = new Long(maxSize_str);

/* 获取文件目录类型参数 */

dirType = this.getInitParameter("dirType");

// 如果web.xml中未配置dirType,缺省值为1

if (StringUtils.isBlank(dirType))

dirType = "1";

// 如果web.xml中配置了非法的dirType,修改其为1

if (",0,1,2,3,".indexOf("," + dirType + ",") < 0)

dirType = "1";

}

/**

* 上传文件数据处理过程

*/

@SuppressWarnings({ "unchecked" })

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html; charset=UTF-8");

response.setHeader("Cache-Control", "no-cache");

String err = "";

String newFileName = "";

DiskFileUpload upload = new DiskFileUpload();

try {

List items = upload.parseRequest(request);

Map fields = new HashMap();

Iterator iter = items.iterator();

while (iter.hasNext()) {

FileItem item = (FileItem) iter.next();

/**

* isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,

* 还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。

* 因此可以用该方法判断是否是普通表单域还是文件上传表单域。

*/

// item.getFieldName()值为filedata

if (item.isFormField()) {

fields.put(item.getFieldName(), item.getString());

} else {

fields.put(item.getFieldName(), item);

}

}

/* 获取表单的上传文件 */

FileItem uploadFile = (FileItem) fields.get("filedata");

//获取上传文件名称 如:Image 001.jpg

String fileNameLong = uploadFile.getName();

/* 获取文件扩展名 */

/* 索引加1的效果是只取xxx.jpg的jpg */

String extensionName = fileNameLong.substring(fileNameLong

.lastIndexOf(".") + 1);

/* 检查文件类型 */

// 返回指定字符在此字符串中第一次出现处的索引。如果没有找到,则返回-1

if (("," + fileExt.toLowerCase() + ",").indexOf(","

+ extensionName.toLowerCase() + ",") < 0) {

printInfo(response, "不允许上传此类型的文件", "");

return;

}

/* 文件是否为空 */

if (uploadFile.getSize() == 0) {

printInfo(response, "上传文件不能为空", "");

return;

}

/* 检查文件大小 */

if (maxSize > 0 && uploadFile.getSize() > maxSize) {

printInfo(response, "上传文件的大小超出限制", "");

return;

}

// 0:不建目录, 1:按天存入目录, 2:按月存入目录, 3:按扩展名存目录.建议使用按天存.

String fileFolder = "";

if (dirType.equalsIgnoreCase("1"))

fileFolder = new SimpleDateFormat("yyyyMMdd")

.format(new Date());

if (dirType.equalsIgnoreCase("2"))

fileFolder = new SimpleDateFormat("yyyyMM").format(new Date());

if (dirType.equalsIgnoreCase("3"))

fileFolder = extensionName.toLowerCase();

/* 文件存储的相对路径 */

String saveDirPath = baseFileDir + fileFolder + "/";

/* 文件存储在容器中的绝对路径 */

String saveFilePath = this.getServletConfig().getServletContext()

.getRealPath("")

+ baseFileDir + fileFolder + "/";

/* 构建文件目录以及目录文件 */

File fileDir = new File(saveFilePath);

if (!fileDir.exists()) {

fileDir.mkdirs();

}

/* 重命名文件 */

String filename = UUID.randomUUID().toString();

File savefile = new File(saveFilePath + filename + "."

+ extensionName);

/* 存储上传文件 */

uploadFile.write(savefile);

// http://localhost:80/HTMLEditor

String projectBasePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ request.getContextPath();

// 上传文件URL回调

// newFileName =projectBasePath + baseURLDir + fileFolder + "/" +

// filename + "." + extensionName;

// 加上!表示为立即上传模式,不加!上传成功之后需要点击确定按钮才会在编辑器中显示

newFileName = "!" + projectBasePath + baseURLDir + fileFolder + "/"

+ filename + "." + extensionName;

System.out.println(newFileName);

} catch (Exception ex) {

newFileName = "";

err = "错误: " + ex.getMessage();

}

printInfo(response, err, newFileName);

}

/**

* 使用I/O流输出 json格式的数据

*

*@param response

*@param err

*@param newFileName

*@throws IOException

*/

public void printInfo(HttpServletResponse response, String err,

String newFileName) throws IOException {

PrintWriter out = response.getWriter();

// String filename = newFileName.substring(newFileName.lastIndexOf("/")

// + 1);

out.println("{\"err\":\"" + err + "\",\"msg\":\"" + newFileName + "\"}");

out.flush();

out.close();

}

}

java xheditor_xhEditor与Java结合使用相关推荐

  1. java 读取txt,java读取大文件

    java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File; import java.io.RandomAccessFile; ...

  2. JAVA基础(JAVA 执行环境) 第一天

    JAVA程序有3中执行环境. (1)能够单独运行的程序,称为Java Application(Java应用程序). (2)在Internet浏览器中运行的程序,称为 Java Applet(JAVA小 ...

  3. java.utilDate和java.sql.Date

    java.utilDate和java.sql.Date由广州疯狂软件教育java培训分享: java程序中的时间类型有java.util.Date和java.sql.Date两种.两者之间的关系和转化 ...

  4. java 终极超类,Java问答:终极父类(3),java问答

    Java问答:终极父类(3),java问答Java问答:终极父类(上) Java问答:终极父类(下) Java问答:终极父类(2)-上篇 Java问答:终极父类(2)-下篇 在之前关于 Object ...

  5. java.lang.OutOfMemoryError: Java heap space错误及...

    为什么80%的码农都做不了架构师?>>>    以下是从网上找到的关于堆空间溢出的错误解决办法: java.lang.OutOfMemoryError: Java heap spac ...

  6. 浅谈Java SE、Java EE、Java ME三者的区别

    1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  7. java.lang.OutOfMemoryError: Java heap space的解决办法

    如果在启动过程中出现内存溢出问题,抛出类似如下异常信息: java.lang.OutOfMemoryError: Java heap space 可以尝试办法: A.修改Tomcat/bin/cata ...

  8. Java接口和Java抽象类

    Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...

  9. Java SE和Java EE应用的性能调优

    凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就,你得超越"花似雾中看"的状态, ...

  10. java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer

    java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer 1.改sql select ...

最新文章

  1. 适用于0基础小伙伴的HTML知识点总结 先到先得哟
  2. python批量合并csv_Python合并多个csv文件
  3. 无需VR外设,普林斯顿学霸用DeepHand解放你的双手
  4. 如何使用Visual Studio 2010(VS2010)编译C语言
  5. ios 内存深度优化_iOS 25个性能优化/内存优化常用方法
  6. Android魔法(第二弹)——一步步实现淹没、展开效果
  7. 最全python爬虫库安装详解
  8. MYSQL 时间处理
  9. 第一节 9布尔运算符
  10. 来自一个用户的体验-Alpha项目测试
  11. 7.4 集合及其内置方法
  12. 树莓派 之 关于用途
  13. python插入排序
  14. C语言计算机题库第91套,二级c语言上机题库 2013年9月全国计算机等级考试二级C语言上机题库100套.doc...
  15. Kali dig命令
  16. Halcon教程十三:图像预处理
  17. 美团前端面试题(附答案)
  18. 程序员写代码都用什么样的笔记本?
  19. Serializer序列化器使用
  20. WordPress网站更改后台登录地址保姆级图文教程

热门文章

  1. 浏览器主页被劫持成360导航.每次打开都是360导航https://hao.360.cn/?src=lmls=n36a7f6a197
  2. 支付公司与银行POS机哪个好?
  3. python中开根号函数_用二分法定义平方根函数(Bisection method Square Root Python)
  4. Xilinx FPGA平台DDR3设计保姆式教程(2)DDR3各时钟频率及带宽分析
  5. 硬盘分区时GPT和MBR的区别/选择
  6. 苹果计算机怎么切换科学计算机,Mac如何使用科学计算器
  7. 用devc++表白_【民大表白墙】表白七号楼332进门右面下铺哥哥的第四天。你再不来,我要下雪了。云雀叫了一整天。...
  8. cdr安装一直卡在初始界面_win10关掉防火墙,cdr卡在用户界面初始化
  9. python - 乌龟吃鱼游戏
  10. 基于深度学习实现手写汉字识别