首页 > 其他分享 >CKEDITOR图片上传实现详细步骤

CKEDITOR图片上传实现详细步骤

时间:2023-11-28 11:02:32浏览次数:31  
标签:CKEDITOR 步骤 image upload uploadContentType 图片 上传 String

CKEditor的编辑器工具栏中有一项“图片域”,该工具可以贴上图片地址来在文本编辑器中加入图片,但是没有图片上传。

 

 

“预览”中有一大堆鸟语,看得很不爽。可以打开ckeditor/plugins/image/dialogs/image.js文件,搜索“b.config.image_previewText”就能找到这段鸟语了,(b.config.image_previewText||'')单引号中的内容全删了,注意别删多了。

扫除这个障碍,下面来研究图片上传。

 

step 1:

首先,还是image.js这个文件,搜索“upload”可以找到这一段

id:'Upload',hidden:true

实际上上传功能被隐藏了,把上面的true改成false,再打开编辑器,就能找到上传功能了。

 

 

step 2:

上面的只是一个上传页面。也就相当于一个HTML的form表单,要配置点击“上传到服务器上”按钮后请求的Action。可以在ckeditor/config.js中配置。

加入:

config.filebrowserUploadUrl="actions/ckeditorUpload";

"ckeditorUpload"是请求的URL,也就是点击这个按钮就会post到ckeditorUpload地址进行处理,这里指向的是Struts 2的一个Action。当然,也可以用servlet或者ASP、PHP等来处理请求。

<package name="actions" extends="struts-default" namespace="/actions">  
<action name="ckeditorUpload" class="com.xxx.CkeditorUpload ">  
</action>  
</package>

 

step 3:

文件上传的控件相当于<input  type="file" name="upload" .../>,其name是”upload”,知道了name那么就可以在Action中获取这个文件。

 

private File upload;  //文件  
private String uploadContentType;  //文件类型  
private String uploadFileName;   //文件名

 

以上三个私有变量都要有set方法。如果不了解的话可以先学习一下Struts 2文件上传。

 

step 4:

如果上传的图片格式不正确,可以在上传界面进行提示。

CKEDITOR图片上传实现详细步骤_上传

 

这个提示不是ckeditor提示的,要在Action中响应。

 

String callback = ServletActionContext.getRequest().getParameter("CKEditorFuncNum");   
if([判断条件]){  
"<script type=\"text/javascript\">");    
"window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)');");   
"</script>");  
return null;  
}

 

step 5:

 

InputStream is = new FileInputStream(upload);  
String uploadPath = ServletActionContext.getServletContext().getRealPath("/img/postImg");  
String fileName = java.util.UUID.randomUUID().toString();  //采用UUID的方式随即命名  
fileName += expandedName;  // 加上后缀名  
File toFile = new File(uploadPath, fileName);  
OutputStream os = new FileOutputStream(toFile);     
byte[] buffer = new byte[1024];     
int length = 0;  
while ((length = is.read(buffer)) > 0) {     
0, length);     
}     
is.close();  
os.close();

这段代码是Struts 2上传图片的核心代码,把图片上传后保存在项目的某个目录下,并随机重命名。

 

step 6:

图片上传成功,在目录下也可以看到图片,至此图片上传成功。但是如何将图片发到编辑器中呢?

点“确定”按钮会有以下提示。

 

 

到这里,要在Action中返回一段JS脚本。

 

String callback =ServletActionContext.getRequest().getParameter("CKEditorFuncNum");   
out.println("<script type=\"text/javascript\">");  
out.println("window.parent.CKEDITOR.tools.callFunction("+ callback + ",'" +"img/postImg/"+ fileName + "','')");   
out.println("</script>");


 

 

有了这段代码,图片上传成功后,根据这里的

"img/postImg/" + filename

相对地址,就可以使用这个图片,直接转到“图像”页面。

 

 

附:Struts 2 Action代码

package com.xxg.bbs.action;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.io.PrintWriter;  
  
import javax.servlet.http.HttpServletResponse;  
  
import org.apache.struts2.ServletActionContext;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
public class CkeditorUpload extends ActionSupport {  
  
private File upload;  
private String uploadContentType;  
private String uploadFileName;  
  
  
public File getUpload() {  
return upload;  
    }  
  
public void setUpload(File upload) {  
          
this.upload = upload;  
    }  
  
public String getUploadContentType() {  
return uploadContentType;  
    }  
  
public void setUploadContentType(String uploadContentType) {  
this.uploadContentType = uploadContentType;  
    }  
  
public String getUploadFileName() {  
return uploadFileName;  
    }  
  
public void setUploadFileName(String uploadFileName) {  
this.uploadFileName = uploadFileName;  
    }  
  
public String execute() throws Exception {  
  
        HttpServletResponse response = ServletActionContext.getResponse();  
"GBK");  
        PrintWriter out = response.getWriter();  
  
// CKEditor提交的很重要的一个参数  
"CKEditorFuncNum");   
          
"";  //文件扩展名  
if (uploadContentType.equals("image/pjpeg") || uploadContentType.equals("image/jpeg")) {  
//IE6上传jpg图片的headimageContentType是image/pjpeg,而IE9以及火狐上传的jpg图片是image/jpeg  
".jpg";  
else if(uploadContentType.equals("image/png") || uploadContentType.equals("image/x-png")){  
//IE6上传的png图片的headimageContentType是"image/x-png"  
".png";  
else if(uploadContentType.equals("image/gif")){  
".gif";  
else if(uploadContentType.equals("image/bmp")){  
".bmp";  
else{  
"<script type=\"text/javascript\">");    
"window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)');");   
"</script>");  
return null;  
        }  
          
if(upload.length() > 600*1024){  
"<script type=\"text/javascript\">");    
"window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件大小不得大于600k');");   
"</script>");  
return null;  
        }  
          
          
new FileInputStream(upload);  
        String uploadPath = ServletActionContext.getServletContext()     
"/img/postImg");  
//采用时间+UUID的方式随即命名  
        fileName += expandedName;  
new File(uploadPath, fileName);  
new FileOutputStream(toFile);     
byte[] buffer = new byte[1024];     
int length = 0;  
while ((length = is.read(buffer)) > 0) {     
0, length);     
        }     
        is.close();  
        os.close();  
          
// 返回“图像”选项卡并显示图片  
"<script type=\"text/javascript\">");    
"window.parent.CKEDITOR.tools.callFunction(" + callback + ",'" + "img/postImg/" + fileName + "','')");    
"</script>");  
          
return null;  
    }  
}

 

参考文章:http://blog.ncmem.com/wordpress/2023/11/02/ckeditor图片上传实现详细步骤/



 

标签:CKEDITOR,步骤,image,upload,uploadContentType,图片,上传,String
From: https://blog.51cto.com/u_14023400/8597208

相关文章

  • 弄明白文件上传
    先从一个例子开始,看一下掘金上传头像接口。请求头:注意看图片中的content-type,后面会解释:content-type:multipart/form-data;boundary=----WebKitFormBoundarycA7SgHXGF2nIiW3S再看一下请求携带的参数(接口中还带了一大串查询参数,这不是重点,重点是form-data参数):从上图中......
  • springboot实现文件上传下载
    1.用IDEA创建名叫springboot-file的SpringBoot项目,并将Packagename改为com.example.springboot,导入SpringWeb和thymeleaf依赖。(如果创建过程中遇到了问题,可以看我写的文章《IDEA中创建SpringBoot项目,并实现HelloWorld》中前三个步骤。)<dependency><groupId>org.springframew......
  • 计算机认证考试:提升专业技能的关键步骤
    摘要:计算机认证考试是评估和验证个人在计算机科学和信息技术领域的专业知识和技能的重要途径。本文将为读者介绍计算机认证考试的重要性,以及为成功通过考试而采取的步骤。引言:在当今数字化时代,计算机技术的不断发展使得拥有强大计算机能力的专业人员越来越受追捧。然而,在竞争激烈的......
  • JAVAWEB之文件的上传下载
    文件上传:本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将他们表达出来。下面是具体的步骤,大家可以跟着我一步一步的用apache的fileupload插件来完成文件的上传下载。1.创......
  • Mysql命令行备份数据库的关键步骤
    MySQL是一个广泛使用的开源关系数据库管理系统,它常用于各种规模的应用,从个人博客到大型企业级系统。在使用MySQL的过程中,数据备份是一项至关重要的任务,它能够确保在发生数据丢失或系统故障时,我们可以恢复和重新部署数据库。在本文中,我们将介绍如何使用mysql命令行工具备份数据库,并......
  • vue3使用kindeditor富文本编辑器组件,支持上传图片(接口或base64)
    参考文章:https://blog.csdn.net/qq_27936291/article/details/1247689891.安装插件npmi@zhj-target/vue3-kind-editor--save或者yarnadd@zhj-target/vue3-kind-editor2.在vue项目中使用importVue3KindEditorfrom'@zhj-target/vue3-kind-editor'conststate=re......
  • JavaWeb实现文件上传下载
    JavaWeb中实现文件上传下载使用jar包:smartupload.jar,该包封装了IO流的操作,如果使用Java自带的IO操作会比较繁琐文件上传的基本步骤@WebServlet(urlPatterns="/uploads",name="UploadServlet")//创建文件上传对象SmartUploadsmartupload=newSmartUpload();//初始化上传操......
  • Hadoop-3.3.6分布式集群搭建步骤
    1.下载JDK8Linux安装Openjdk2.下载Hadoop3.3.6Hadoop安装及环境变量配置3.创建hadoop数据存储的目录mkdir-p/opt/hadoop/tmp/opt/hadoop/hdfs/data/opt/hadoop/hdfs/name4.配置hostname和host文件hostnamectlset-hostname{hostName}vim/etc/hosts192.168.58.1......
  • 上传文件 - 常用MIME类型
    后缀名MIME名称*.3gppaudio/3gpp,video/3gpp*.ac3audio/ac3*.asfallpication/vnd.ms-asf*.auaudio/basic*.csstext/css*.csvtext/csv*.docapplication/msword*.dotapplication/mswor......
  • JavaWeb实现简单的文件上传和下载
    一、文件上传1.1文件上传的简单实现前端的标签介绍①需要一个<form>表单标签,请求方式为post请求PS:因为get请求时url有长度限制,而带有文件上传的url一般会超出get请求的长度限制,所以只能用post②<form>标签中需添加enctype属性,属性值必须为multipart/form-dataenctype属性:enc......