`
j夫子
  • 浏览: 92562 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

2.【编辑器】模仿iteye的编辑器附件上传功能

    博客分类:
  • bbs
 
阅读更多
所用到的编辑器:kindeditor-v4.0.6
先看图:


个人觉得kd比fckeditor要好用一些。
虽然编辑器是有自带的上传功能的,但是确实也有不方便之处。所以自己手动做一个。

关于jsp中整合editor的内容就不赘述了。
我这里用的是kindeditor的simple模式,比较简洁。

1,首先给出upload.jsp的代码
<%@ include file="/WEB-INF/page/share/taglib.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<body>
	上传附件:
		<html:form action="/attachedUpload" method="post" enctype="multipart/form-data">
			<input type="file" name="file"/><input type="submit" value="上传"/>
		</html:form>
		您最近上传的附件:<br/>
	<c:forEach items="${attacheds}" var="data">
	<c:if test="${data.ext=='img'}">
		附件:<img src="${data.path}" width="20" height="20"/> <input type="button" name="${data.path}" onClick="javascript:parent.insertAttached('${data.path}','${data.ext}');" value="插入到编辑器"><br/>
	</c:if>
	<c:if test="${data.ext=='file'}">
		附件:<img src="<%=request.getContextPath() %>/img/file.png" width="20" height="20"/> <input type="button" name="${data.path}" onClick="javascript:parent.insertAttached('${data.path}','${data.ext}');" value="插入到编辑器"><br/>
	</c:if>	
	</c:forEach>
	</body>
</html>

@这个jsp 是要以frame的形式嵌入到文章发表界面。
这里面区分了图片文件和普通文件,若上传的是图片文件 则点【插入编辑器】后 编辑器的光标位置会加入<img src='...'/>,反之则加入<a href='...'></a>。从开头的那张图可以看得出来。

2.然后是【插入到编辑器】这个按钮,点击后调用父窗口的.insertAttached 方法。该方法在帖子发表页面中声明。
function insertAttached(src,ext){
				if(ext=="img"){
					var html = "<img src='"+src+"'/>";
				}else{
					var html = "<a href='"+src+"'>【附件:编辑附件名称】</a>";
				}
				
				editor.insertHtml(html);
			}


@关于editor 这个对象,是kindeditor内置的,在jsp页面中引入该编辑器时创建。
editor.insertHtml(html)这个方法则是在光标位置插入内容。
可以参看 kindeditor 的文档 http://www.kindsoft.net/docs/editor.html#inserthtml-val

3.好了,现在去看看后端是怎么做的.
环境:struts1.3 hibernate3 spring2.5
首先在加载upload.jsp之前,先访问/attachedUpload.do
/**
 * 附件上传
 * @author 赵俊夫
 *
 * 2012-4-18
 */
@Controller(value="/attachedUpload")
public class AttachedUploadAction extends Action {
	@Resource(name="attachedDao")
	private AttachedDao attachedDao;
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		/**Struts1 的 formbean*/
		AttachedForm f = (AttachedForm) form;
		/**创建一个附件 对象 我们这里把附件定义成对象,在数据库中与用户Many to one 关联*/
		Attached attached=null;
		/**工具类 作用:拿到session中的登录用户*/
		UserUtil uu = new UserUtil(request);
		User loginUser = uu.getLoginUser();
		/**如果已经登录*/
		if(loginUser!=null){
			if(f.getFile()!=null){
				/** 工具类:读配置文件*/
				OptionBean op = new OptionBean(request);
				/**上传格式校验*/
				if(!UploadUtil.validateUploadAll(f.getFile())){
					request.setAttribute("message", "格式不允许!");
					request.setAttribute("urladdress", UrlUtil.parseUrl(request,
							"upload"));
					return mapping.findForward("message");
				}
				/**上传文件后会有信息返回:文件的路径等*/
				UploadBean bean = UploadUtil.doUploadByTime(f.getFile(), op.getAttachedLocation(), request);
				String id = bean.getCode();
				String path = bean.getvPath();
				attached = new Attached();
				attached.setId(id);
				attached.setPath(path);
				/**附件与用户多对一关联*/
				attached.setUser(loginUser);
				/**将附件持久化到数据库*/
				attachedDao.persist(attached);
				
			}
		}
		/**获取当前用户最近上传的10条附件记录 并发送到request区域供.jsp页面使用*/
		Set<Criterion> criterions = new LinkedHashSet<Criterion>();
		criterions.add(Restrictions.eq("user", loginUser));
		Set<Order> orders = new LinkedHashSet<Order>();
		orders.add(Order.desc("date"));
		List<Attached> datas = attachedDao.getScrollData(Attached.class, 0, 10, criterions, orders);
		
		/**
		 * 数据存放
		 */
		request.setAttribute("attacheds", datas);
		return mapping.findForward("upload");
	}
}


有点乱了,今天才把fckeditor换掉了,在iteye喜欢上了简洁。


上面代码用到了UploadUtil

代码如下:
public class UploadUtil {
/**图片格式数组*/
	public static final String[] imageExts = {".gif",".jpg",".jpeg",".png",".tmp"};
/**文件格式数组*/
	public static final String[] fileExts = {".rar",".zip"};

	@SuppressWarnings("deprecation")
	public static UploadBean doUploadByTime(FormFile formfile,String path,HttpServletRequest request) throws FileNotFoundException, IOException{
		String ext = HeadPic.getExt(formfile.getFileName());
		String fmt = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date())+new Random().nextInt(1000);
		String code = fmt;
		String filename = code+ext;
		byte[] filedata = formfile.getFileData();
		String realPath = request.getRealPath(path);
		File dir = new File(realPath);
		if(!dir.exists()){
			dir.mkdirs();
		}
		String filePath =  realPath+File.separator+filename;
		String vPath = request.getContextPath()+path+filename;
		FileOutputStream fos = new FileOutputStream(new File(filePath));
		fos.write(filedata);
		fos.close();
		UploadBean bean = new UploadBean();
		bean.setCode(code);
		bean.setvPath(vPath);
		return bean;
		
	}
	public static boolean validateUpload(FormFile formfile,String[] allowTypes){
		String filename = formfile.getFileName();
		String ext = HeadPic.getExt(filename);
		for(String t:allowTypes){
			if(t.toLowerCase().equals(ext.toLowerCase())){
				return true;
			}
		}
		return false;
	}
	public static boolean validateUploadImage(FormFile formfile){
		if(validateUpload(formfile, imageExts))
			return true;
		else 
			return false;
	}
	public static boolean validateUploadFile(FormFile formfile){
		if(validateUpload(formfile, fileExts))
			return true;
		else 
			return false;
	}
	public static boolean validateUploadAll(FormFile formfile){
		if(validateUploadFile(formfile) || validateUploadImage(formfile)){
			return true;
		}
		else{
			return false;
		}
	}
}


  • 大小: 37.4 KB
分享到:
评论

相关推荐

    JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能)

    JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能) 1.集合了日期、时间、在线预览和特殊字符插件,采用3.0皮肤; 2.将图片上传与管理的JSP页面改写成SERVLET,同时去除JSON包; 3.添加图片压缩...

    http://topkinghat.iteye.com/blog/840706

    例如,开发者可能会使用Docker进行容器化部署,使用Jenkins进行持续集成和持续部署,使用Postman进行API测试,或是使用Visual Studio Code这样的轻量级编辑器提高开发效率。 姜铁的简历可能会详细列出他在这些领域...

    模仿iteye代码高亮显示

    模仿iteye代码高亮显示,意味着我们要实现一个类似的功能,使得代码在网页上展示时,关键字、变量、函数等元素能够以不同的颜色和样式突出显示。iteye是一个知名的开发者社区,它提供了良好的代码高亮功能,这有助于...

    ckeditor.rar 富文本编辑器

    ckeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型...

    ITEYE手机阅读器更新

    此次“ITEYE手机阅读器更新”可能涉及到的功能改进、性能优化或者新特性添加,具体细节可以通过提供的博文链接(已失效)进一步了解。 作为一款工具软件,源码的更新通常意味着开发者对应用程序进行了以下几方面的...

    自己编写的文本编辑器3

    自己编写的文本编辑器3

    itunesetup

    iTunesSetup.exe

    Word网页编辑器.htm

    Word网页编辑器.rar 博文链接:https://xinlingwuyu.iteye.com/blog/193665

    文本编辑器EmEditor

    NULL 博文链接:https://java-flex.iteye.com/blog/866211

    论坛附件批量下载器 2.0

    附件精灵2是一款功能强大,可以通吃所有论坛所有常见附件的小工具,尤其能突破限制,随意下载需要论坛币的附件!下载解压后首先执行 Setup.bat,然后要将你的屏幕颜色质量调为32位,否则会出现Run-time error错误

    UE文本编辑器直接安装

    UE文本编辑器UE文本编辑器

    SMS系统163在线编辑器使用

    博文链接:https://zzwwyf.iteye.com/blog/231513

    Hibernate参考文档3.1.2

    Hibernate参考文档3.1.2 博文链接:https://tenn.iteye.com/blog/134826

    有点像Qzone里的日志编辑器

    有点像Qzone里的日志编辑器 博文链接:https://struts2.iteye.com/blog/196646

    fck新闻编辑器

    博文链接:https://dapeng.iteye.com/blog/140861

    java版mini编辑器

    NULL 博文链接:https://hcmfys.iteye.com/blog/1696497

    附件自动下载工具

    附件自动下载工具,这个工具可以批量的下载邮箱的附件,但是加了密码,不是我加的,我正在找密码

    登录页

    NULL 博文链接:https://uule.iteye.com/blog/2115834

Global site tag (gtag.js) - Google Analytics