xheditor上传图片的java实现

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

xheditor官方给出了上传接口。因此我们只需要调用自己的Action按照它指定的json格式返回一个json数据就可以了。

 

一、使用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框架,spring没测试过,有需要的可以试试。

/**
     * 文本编辑器上传图片
     * @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实现

时间: 2024-10-30 03:26:38

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

iOS用AFN上传图片到java后台

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager POST:@"http://localhost:8080/FileUpdateDemo/FileDemo" parameters:nil constructingBodyWith

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

今天在使用安卓xUtils3框架配合SmartUpload框架上传图片到Java服务端时,遇到了一个莫名其妙的错误: 安卓端代码如下: 似乎并没有发现什么问题,以前在用xUtils2.6老版本时也是这样写的,完全可以上传. 经过与网上的源码对比发现,xUtils3框架默认没有开启multipart属性. 需要我们手动设置multipart编码: 设置的代码如下: 只要加一句这行代码就可以了: param.setMultipart(true); 最后,问题成功解决 原文地址:https://www

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

一.上传图片 1.1.示例 /* 上传图片 */ import java.net.*; import java.io.*; import java.util.*; import java.text.*; /* 客户端 1.建立客户端服务 2.读取客户端已经有数据,,将文件名发送给服务端 3.通过Scoket,输出流将数据发送给服务端 4.接收服务端返回信息 5.关流Socket和流资源 */ class UploadClient1 { public static void main(String

springmvc上传图片并显示图片--支持多图片上传

实现上传图片功能在Springmvc中很好实现.现在我将会展现完整例子. 开始需要在pom.xml加入几个jar,分别是: [java] view plain copy <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dep

xheditor的使用

xheditor是一款比较复杂的在线编辑器,默认支持php和asp.net,从官方的demo可以看出,它的复杂度远远大于其他编辑器,站在java的立场思考,这编辑器对java程序员太不公平了.但是没有办法啊,官方没对java做支持咱们可以根据开发文档自己搞啊. 1 先看看这款编辑器长什么样子 看到这里大家就知道了,其实这个就是csdn使用的编辑器 2  显示编辑器的jsp页面 <%@ page language="java" import="java.util.*&qu

java网络之tcp

简单tcp传输 package pack; /* 演示tcp传输. 1,tcp分客户端和服务端. 2,客户端对应的对象是Socket. 服务端对应的对象是ServerSocket. 客户端, 通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机. 因为tcp是面向连接的.所以在建立socket服务时, 就要有服务端存在,并连接成功.形成通路后,在该通道进行数据的传输. 需求:给服务端发送给一个文本数据. 步骤: 1,创建Socket服务.并指定要连接的主机和端口. */ impor

Java基础知识网络编程(TCP练习)

练习:复制文本 练习要求:把客户端的一个文件内容发到服务端,在服务端把数据存储到一个文件当中.相当于复制文件. import java.io.*; import java.net.*; class TxtCopyTestClient { public static void main(String[] args) throws Exception { Socket s=new Socket("192.168.1.6",10003); BufferedReader bur=new Buf

JAVA微服务架构视频教程

教程目录:┣━JAVA微服务架构视频教程┃ ┣━Java教程:第1章 微服务简介 4┃ ┃ ┣━Java教程:001构建单体应用┃ ┃ ┣━Java教程:002微服务解决复杂问题┃ ┃ ┣━Java教程:003微服务的优点┃ ┃ ┣━Java教程:004微服务的缺点┃ ┣━Java教程:第2章 Linux使用 19┃ ┃ ┣━Java教程:005Linux 简介┃ ┃ ┣━Java教程:006Linux 与 Windows 比较┃ ┃ ┣━Java教程:007安装 Linux┃ ┃ ┣━Java

微信小程序--图片相关问题合辑

图片上传相关文章 微信小程序多张图片上传功能 微信小程序开发(二)图片上传 微信小程序上传一或多张图片 微信小程序实现选择图片九宫格带预览 ETL:微信小程序之图片上传 微信小程序wx.previewImage预览图片 微信小程序之预览图片 小程序开发:上传图片到腾讯云 .NET开发微信小程序-上传图片到服务器 微信小程序本地图片处理--按屏幕尺寸插入图片 [微信小程序]上传图片到阿里云OSS Python Flask小程序文件(图片)上传技巧 小程序图片上传阿里OSS使用方法 微信小程序问题汇