`
gary0416
  • 浏览: 334790 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xheditor文件上传java版

阅读更多

基于http://www.iteye.com/topic/692396

修正了项目路径自动获取,解决了在windows环境下的路径问题

 

package com.xheditor.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.lang.StringUtils;

@SuppressWarnings({ "serial", "deprecation" })
public class UploadFileServlet extends HttpServlet {
	
	private static String baseFileDir = File.separator + "upload" + File.separator;//上传文件存储目录
	private static String baseURLDir = "/upload/";//上传文件目录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 {
		/*获取文件上传存储的相当路径*/
		if (!StringUtils.isBlank(this.getInitParameter("baseDir"))){
			baseFileDir = this.getInitParameter("baseDir");
		}
		
		String realBaseDir = this.getServletConfig().getServletContext().getRealPath(baseFileDir);
		File baseFile = new File(realBaseDir);
		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");
		
		if (StringUtils.isBlank(dirType))
			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<FileItem> items = upload.parseRequest(request);
			Map<String, Serializable> fields = new HashMap<String, Serializable>();
			Iterator<FileItem> iter = items.iterator();
			
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				if (item.isFormField())
					fields.put(item.getFieldName(), item.getString());
				else
					fields.put(item.getFieldName(), item);
			}
			
			/*获取表单的上传文件*/
			FileItem uploadFile = (FileItem)fields.get("filedata");
			
			/*获取文件上传路径名称*/
			String fileNameLong = uploadFile.getName();
			System.out.println("fileNameLong:" + fileNameLong);
			
			/*获取文件扩展名*/
			/*索引加1的效果是只取xxx.jpg的jpg*/
			String extensionName = fileNameLong.substring(fileNameLong.lastIndexOf(".") + 1);
			System.out.println("extensionName:" + extensionName);
			
			/*检查文件类型*/
			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 + "/";
			System.out.println("saveDirPath:" + saveDirPath);
			
			/*文件存储在容器中的绝对路径*/
			String saveFilePath = this.getServletConfig().getServletContext().getRealPath("") + baseFileDir + fileFolder + "/";
			System.out.println("saveFilePath:" + saveFilePath);
			
			/*构建文件目录以及目录文件*/
			File fileDir = new File(saveFilePath);
			if (!fileDir.exists()) {fileDir.mkdirs();}
			
			/*重命名文件*/
			String filename = UUID.randomUUID().toString();
			File savefile = new File(saveFilePath + filename + "." + extensionName);
			
			/*存储上传文件*/
			System.out.println(upload == null);
			uploadFile.write(savefile);
			
			String projectBasePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
			newFileName = projectBasePath + baseURLDir + fileFolder + "/" + filename + "." + extensionName;		
			System.out.println("newFileName:" + newFileName);
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			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();
	}
}

 

前台页

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="xheditor-1.1.7/jquery/jquery-1.4.2.min.js"></script>
	<script type="text/javascript" src="xheditor-1.1.7/xheditor-1.1.7-zh-cn.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			//初始化xhEditor编辑器插件
			$('#xh_editor').xheditor({
				tools:'full',
				skin:'default',
				upMultiple:true,
				upImgUrl: "servlet/UploadFileServlet",
				upImgExt: "jpg,jpeg,gif,bmp,png",
				onUpload:insertUpload,
				html5Upload:false
			});
			//xbhEditor编辑器图片上传回调函数
			function insertUpload(msg) {
				var _msg = msg.toString();
				var _picture_name = _msg.substring(_msg.lastIndexOf("/")+1);
				var _picture_path = Substring(_msg);
				var _str = "<input type='checkbox' name='_pictures' value='"+_picture_path+"' checked='checked' onclick='return false'/><label>"+_picture_name+"</label><br/>";
				$("#xh_editor").append(_msg);
				$("#uploadList").append(_str);
			}
			//处理服务器返回到回调函数的字符串内容,格式是JSON的数据格式.
			function Substring(s){
				return s.substring(s.substring(0,s.lastIndexOf("/")).lastIndexOf("/"),s.length);
			}
		});
	</script>
  </head>
  
  <body>
    <form action="" method="post">
  	<div>
  	<textarea id="xh_editor" name="contents" rows="25" style="width:100%; border: 1px"></textarea>
  	</div>
  	<div id="uploadList"></div>
	</form>
  </body>
  </html>
 

 

demo见附件

分享到:
评论
4 楼 wl349316921 2014-11-11  
为什么我上传出现the request doesn't contain a multipart/form-data or multipart/mixed stream,有人解决了吗
3 楼 wbsdwbwbsd 2014-06-17  
weixiaolong 写道
难道你没遇见过the request was rejected because no multipart boundary was found,和the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/octet-stream 这两个错中的一个??fileupload只支持multipart开头的的文件类型


我遇到了请问你解决了没
2 楼 snlei81 2014-06-11  
获取不到上传的文件  是什么情况 ??
就是这一步

/*获取表单的上传文件*/ 
            FileItem uploadFile = (FileItem)fields.get("filedata"); 
uploadFile 是null    大神求指点
1 楼 weixiaolong 2013-07-11  
难道你没遇见过the request was rejected because no multipart boundary was found,和the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/octet-stream 这两个错中的一个??fileupload只支持multipart开头的的文件类型

相关推荐

    xhEditor文件上传的Java实现.pdf

    xhEditor文件上传的Java实现 xhEditor是基于JavaScript的在线富文本编辑器,它提供了多种实用的功能,如文本编辑、图片上传、文件上传等。以下是xhEditor文件上传的Java实现的相关知识点: xhEditor简介 xhEditor...

    xhEditor编缉器下使用java上传的类文件

    xhEditor编缉器,用于java开发时,上传文件,同时解决了在火狐上使用时报错的问题,主要是因为火狐上传时使用的是HTML5,如何解决请花1分吧!! 记得把xheditor里的上传改成servlet的路径呀!!

    xhEditor struts2实现图片上传

    xhEditor是一款开源的JavaScript富文本编辑器,它提供了丰富的编辑功能,如字体样式设置、颜色调整、图片和文件上传等。而Struts2则是一个强大的MVC框架,用于构建Java Web应用。 首先,我们需要了解xhEditor的基本...

    xheditor for java

    《XHEditor在Java环境下的应用与实践》 XHEditor是一款流行的JavaScript富文本编辑器,它为网页提供了一个强大的文字编辑界面,支持多种格式的输入,如HTML、BBCode等,用户可以方便地进行图文混编,实现所见即所得...

    xheditor编辑器实现图片上传

    以上代码处理了文件上传,并将保存的文件名返回给XHEditor。XHEditor会根据返回的文件名插入到编辑器中。 最后,用户在XHEditor中点击“插入图片”按钮,选择本地图片后,编辑器会自动发起POST请求到设定的`...

    Xheditor 富文本编辑器 Java版

    **Xheditor 富文本编辑器 Java版** Xheditor是一款功能强大的JavaScript富文本编辑器,专为网页设计和开发者提供便利。它以其简洁的界面、丰富的功能和良好的用户体验而受到广泛欢迎。Java版的Xheditor是将该编辑器...

    xheditor Java代码

    本文档主要介绍了一段与`xheditor`相关的Java代码,这段代码实现了一个文件上传功能,支持火狐(Firefox)和IE浏览器。`xheditor`是一款轻量级且易用的富文本编辑器,广泛应用于网页端的文本编辑场景。 #### 二、...

    jquery.xheditor和jquery,uploadify实现文件上传完整实例

    jquery xheditor是jquery中较好的编辑器插件,而jquery.uploadify也是jquery实现文件上传很优秀的插件,本项目实例解决了两个插件文件上传的问题,对于应用学习两个插件,实现文件上传,具有很好的参考价值,同时本例子是...

    xheditor 在线编辑器jsp/ava实现版

    视频上传通常涉及到文件大小限制、格式转换和流媒体服务的集成,xheditor可能已经考虑到了这些因素,以确保视频内容能够顺畅地在网页上播放。 **远程抓图上传**是一个非常实用的功能,尤其对于那些经常使用屏幕截图...

    xheditor集成struts2上传图片

    总之,集成xheditor和Struts2进行图片上传涉及到前端编辑器配置、后端Action处理、文件上传拦截器配置以及安全策略的制定。这是一个典型的前后端交互案例,对于理解和实践Web应用开发具有重要价值。通过这个过程,...

    xheditor-1.1.14

    参数值:大于0的数值,默认:99,设置为1关闭多文件上传 说明:本功能需要浏览器支持HTML5上传 备注:1.0.0 RC3新添加 upLinkUrl:超链接文件上传接收URL 参数值:接收用户上传的服务器端程序URL,默认留空为禁用...

    xheditor jsp完整实例

    接着,配置编辑器的初始化参数,例如语言环境、工具栏设置、上传文件的URL等。 5. **实例部署**: 将这个“xheditor jsp完整实例”部署到Web服务器上,比如Tomcat、Jetty等。部署过程中,确保所有相关的静态资源...

    jsp版xheditor

    在上述代码中,`$("#editor").xheditor()`是初始化编辑器的操作,`tools: "full"`表示使用全部工具,`upImgUrl`和`upImgExt`则分别设置了图片上传的URL和允许的文件类型。 **总结** XHEditor作为一款强大的富文本...

    HTML 在线编辑xheditor

    xheditor以其简单易用和高度可定制性深受开发者喜爱,特别是对Java开发者的友好性,使其在Java项目中广泛应用。 **1. xheditor特性** - **多语言支持**:xheditor内置多种语言包,满足不同地区用户的需求。 - **...

    可以插入本地图片的在线编辑器(xheditor)

    为了实现这一功能,xheditor 内部可能集成了自定义的服务器端处理逻辑,例如这里提到的 `UploadLocalPicAction.java` 文件,很可能就是用于处理图片上传的Java代码。 【标签】"xheditor" 和 "在线编辑器" 是对这个...

    xheditor的使用

    在服务器端,XHEditor通常通过Ajax请求与后端进行交互,例如,保存编辑的内容或上传文件。这需要开发者在服务器端设置相应的接收和处理请求的接口。对于Java开发者来说,可能涉及到Servlet或Spring MVC等相关技术。 ...

    xheditor jsp版

    在JSP版中,我们需要在后端创建一个处理文件上传的Servlet或Controller,接收来自编辑器的POST请求,处理文件上传逻辑,如验证文件类型、大小,以及保存到服务器的指定路径。XHEditor会提供回调函数,用于设置上传...

    xheditor 1.2.2.zip

    内置强大的Ajax上传,包括HTML4和HTML5上传支持(多文件上传、真实上传进度及文件拖放上传),追求完美的用户上传体验。 Word完美支持 实现Word代码自动检测并清理,提供高效完美的Word代码过滤方案,生成代码最优化...

    Struts 架构下使用XhEditor

    为了处理文件上传,我们需要在Struts配置文件中定义一个对应的Action,处理上传请求。这个Action可能需要处理文件流,将文件保存到服务器,并返回上传成功的消息。同时,我们还需要确保Struts的配置文件中已经启用了...

Global site tag (gtag.js) - Google Analytics