最近一个项目中因为框架的原因,很多文本编辑器都不兼容,最后找到xheditor,这个富文本编辑器的确不错,功能基本都能满足,只是上传图片的java接口需要自己写,因此,测试了两种方法,最终成功。分享给大家。

xheditor官方给出了上传接口。因此我们只需要调用自己的Action按照它指定的json格式返回一个json数据就可以了。aaarticlea/png;base64,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" alt="" />

 

一、使用servlet时的实现方式,servlet的实现方式需要引入commons-fileupload-1.3.1.jar包。主要是用来解析前台传过来的请求。

  1、前台页面的写法,当然要引入xheditor啦,这里我就不写了。这里主要是upImgUrl要写上你后台的Servlet。

<textarea class="editor" name="articleContent" rows="35" cols="100" style="z-index:99;"
upImgUrl="UploadFileServlet" upImgExt="jpg,jpeg,gif,png" >
${article.articlecontent }
</textarea>

2、后台servlet的写法。配置文件中我也省略了,这里仅仅是一个Servlet。需要注意的,这里要引入commons-fileupload-1.3.1.jar包来解析请求。

package com.zk.web.action;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List; import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ServletContext sc; public void init(ServletConfig config) {
sc = config.getServletContext();
} protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
} protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream out = response.getOutputStream();
request.setCharacterEncoding( "utf-8" );
response.setHeader("Content-Type" , "text/html");
String returnPath = ""; DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
System.out.println("上传文件的大小:" + item.getSize());
System.out.println("上传文件的类型:" + item.getContentType());
System.out.println("上传文件的名称:" + item.getName()); returnPath = "images/"+item.getName();
//这里是取得项目地址
File forder = new File(sc.getRealPath("/")+"images/");
            //判断文件夹是否存在
if (!forder.exists()) {
forder.mkdir();
} File file = new File(sc.getRealPath("/")+"images/"+item.getName());
item.write(file);
System.out.println("上传文件成功!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传文件失败");
} //这里是关键,返回上传图片存储在服务器的地址。路径根据自己项目的路径调整。
out.print("{'err':'','msg':'"+ returnPath.replace("\\", "/")+"'}"); } }

二、使用spring mvc时的实现方式。uploadImage就是一个Action,

  1、前台页面的写法,同样要引入xheditor啦,我也省略了,这里主要是upImgUrl要写上你后台的Action。

<textarea class="editor" name="articleContent" rows="35" cols="100" style="z-index:99;"
upImgUrl="uploadImage.do" upImgExt="jpg,jpeg,gif,png" >
${article.articlecontent }
</textarea>

2、后台Action的写法,这里是使用的是sping mvc框架。

/**
* 文本编辑器上传图片
* @param request
* @param response
* @return
* @throws Exception
*/
public void uploadImage(HttpServletRequest request,
HttpServletResponse response)throws Exception{
ServletOutputStream out = response.getOutputStream();
request.setCharacterEncoding( "utf-8" );
response.setHeader("Content-Type" , "text/html"); CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 设置编码
commonsMultipartResolver.setDefaultEncoding("utf-8");
if (commonsMultipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile image = multipartRequest.getFile("filedata");
String url = "images"+File.separator+Tool.dateToString(new Date(), "yyyyMMdd")+File.separator;
       //这里可以从项目中取得你项目根目录的地址
String filePath = "D:/"+url;
Random r = new Random();
if(image != null && !image.isEmpty()){
InputStream xtins = image.getInputStream();
String hj = new String(image.getOriginalFilename().getBytes("ISO-8859-1"),"UTF-8");
hj = hj.split("\\.")[1];
          //这里用来生成文件名
String fileName = Tool.dateToString(new Date(), "yyyyMMddHHmmss")+r.nextInt(1000)+"."+hj;
saveInputStreamToFile(filePath, fileName, xtins);
          //这里是用来返回给xheditor的
out.print("{'err':'','msg':'"+ (url+fileName).replace("\\", "/")+"'}");
}
}
} /**
* 保存文件流到指定路径
* @param filePath
* @param fileName
* @param inputStream
* @throws Exception
*/
public void saveInputStreamToFile(String filePath, String fileName,
InputStream inputStream) throws Exception {
OutputStream os = null;
try {
File forder = new File(filePath);
if (!forder.exists()) {
forder.mkdir();
}
File file = new File(filePath + fileName);
os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
inputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (os != null) {
os.close();
}
}
}

xheditor上传图片的java实现的更多相关文章

  1. 手机端上传图片及java后台接收和ajaxForm提交

    有很多微信开发的项目在手机端需要传图片,但是又不想调用微信的上传图片接口,于是采取了如下做法: 使用ajaxForm提交文件所需js:jquery.form.js 页面代码: <%@ page ...

  2. xheditor上传图片配置

    二. 源码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Xeditor.a ...

  3. ios客户端base64上传图片到java服务器遇到的问题

    由于base64位包含了“+”和“\”两个特殊符号,导致ios编码后上传图片到服务器,服务器解码以后的值会不一致,导致图片损坏. 解决办法:重写Base64类,用“(”和“)”替换“+”和“\”两个特 ...

  4. iOS用AFN上传图片到java后台

    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { AFHTTPSessionMana ...

  5. Android使用xUtils3上传图片报错解决:java.lang.ArrayIndexOutOfBoundsException: 70918

    今天在使用安卓xUtils3框架配合SmartUpload框架上传图片到Java服务端时,遇到了一个莫名其妙的错误: 安卓端代码如下: 似乎并没有发现什么问题,以前在用xUtils2.6老版本时也是这 ...

  6. 网络编程3--毕向东java基础教程视频学习笔记

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

  7. 黑马程序员——【Java基础】——网络编程

    ---------- android培训.java培训.期待与您交流! ---------- 一.网络模型概述 网络模型示意图: 说明: (1)数据的传输:在用户端,应用层的数据,经过层层封包,最后到 ...

  8. JAVA基础学习day25--Socket基础二-多线程

    一.上传图片 1.1.示例 /* 上传图片 */ import java.net.*; import java.io.*; import java.util.*; import java.text.* ...

  9. xheditor在线编辑器的使用

    在你所需要在线编辑器的工程目录下,导入xheditor_emot.xheditor_plugins和xheditor_skin.jquery四个文件夹,然后在textarea标签中加入: class= ...

随机推荐

  1. 剑指OFFER之二进制中1的个数(九度OJ1513)

    题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,代表测试样例的数量.对于每个测试样例输入为一个整 ...

  2. eclipse scons 使用指南

    http://sconsolidator.com/projects/sconsolidator/wiki/Getting_Started Add SCons support to an existin ...

  3. cocos2d-x 图形绘制

    转自:http://blog.csdn.net/zhy_cheng/article/details/8480048 图形绘制的话,在cocos2d-x自带的TestCpp里有,包括绘制点,直线,多边形 ...

  4. 【HMTL】文字飞舞的美

    这是在一个大神那看到的就拿过来了,希望能够更多人能看到. 这个是效果: 源文件下载: 点 击 下 载

  5. [MEAN Stack] First API -- 7. Using Route Files to Structure Server Side API

    Currently, the server.js is going way too long. In the real world application, it is likely that we ...

  6. Android SDK安装时碰到的问题之解决办法

    问题:hostname in certificate didn't match: <dl-ssl.google.com> != <www.google.com> Fetchin ...

  7. PAT 1002

    1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...

  8. C#_deepCopy

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...

  9. 我的第一款Cocos2d 游戏小狗快跑基本完成

  10. Linux shell 脚本攻略之生成任意大小的文件

    摘自:<Linux shell 脚本攻略>