日期:2014-05-16 浏览次数:20658 次
这段时间的业余时间一直忙于自己博客(http://www.dianfusoft.com/)的开发工作,特别是选择在线编辑器时不知道选择哪个好,因为第一次用这玩意儿。选择了那么多的编辑器,最后还是选择了xhEditor这款在线编辑器。我的理由主要是有以下几点:
1. 这是一个开源的编辑器,虽然是2009年开始发布的,可是功能一点都不逊色而且小巧,加载迅速;
2. 丰富的问题解决方案。虽然和老牌FCKEditor相比有一定差距,但是官方完善的文档应该可以解决遇到的问题;
3. 最主要的是自己一直使用的CSDN博客也是选择这个编辑器,用惯了这个编辑器没理由换别的。
今晚就分享一个自己解决了的问题,那就是xhEditor上传图片的问题。网上的资料真是鱼龙混杂,可以说都是复制来复制去,基本上都没用。算了,不说这了,没意思。我就说说我的情况,由于我的项目采用的是Struts2,网上看到了一篇用servlet实现图片上传的文章,我相信那是可以实现的,但是太过于复杂,我一向都很反感用servlet,那是毕业生才干的事儿!经过自己的思考,终于实现了用Struts2+Ajax上传图片的模式,现贴出代码。
首先在页面xhEditor需要设置以下参数:
upImgUrl:"uploadImg.action" //上传服务器接口
,onUpload:callBackFunction //服务器端返回信息,是json格式
上述配置完成后就开始写Struts2上传代码,如下所示:
packagecom.dianfusoft.action;
public classEditAction extends ActionSupport {
private File filedata; //编辑器接口中提供的文件名为此名,所以不可更改
private StringfiledataContentType; //文件类型
private String filedataFileName; //文件名
private String saveDir="你的服务器文件路径"; //服务器图片保存路径(此处本人隐藏)
private String message; //文件上传信息,以json格式返回到客户端
//xheditor上传图片功能
public String uploadImg() throwsIOException{
ActionContextac=ActionContext.getContext();
HttpServletResponseresponse=(HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);
Filefile=this.getFiledata(); //获取编辑器中传递的文件
File basePath=newFile(ServletActionContext.getServletContext().getRealPath(saveDir));
PrintWriter out =response.getWriter();
if(!basePath.exists()){
basePath.mkdirs();
}
if(file.length()==0){
//不允许上传空文件
message="{err:'不允许上传空文件,请重新选择!',msg:''}";
}elseif(file.length()>1024*1024*2){
//限制文件上传大小
message="{err:'图片大小不能超过2M,请重新选择!',msg:''}";
}else{
try {
BufferedInputStreambis=new BufferedInputStream(new FileInputStream(filedata));
BufferedOutputStreambos=new BufferedOutputStream(new FileOutputStream(newFile(basePath+file.separator+filedataFileName)));
byte[]b=new byte[10*1024];
for(intcount=-1;(count=bis.read(b))!=-1;){
bos.write(b,0,count);
bos.flush();
}
if(bis!=null){