html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ckeditor_upload.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<script type="text/javascript">
window.onload = function() {
CKEDITOR.replace("content",{
width: 600,
height: 400,
filebrowserFileUploadUrl : 'servlet/upload?type=file',
filebrowserImageUploadUrl : 'servlet/upload?type=image',
filebrowserFlashUploadUrl : 'servlet/upload?type=flash'
});
};
</script>
</head>
<body>
<div id="content"></div>
</body>
</html>
servlet:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Upload extends HttpServlet {
private List<String> allowedImages = new ArrayList<String>();
private String uploadPath;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* 利用firebug可以看到ckeditor给我们生成了这样一段代码
* <form lang="zh-cn" action="servlet/upload?type=image&CKEditor=content&CKEditorFuncNum=1&langCode=zh-cn" dir="ltr" method="POST" enctype="multipart/form-data">
* <input type="file" size="38" name="upload">
* </form>
* 可以知道ckeditor上传图片是提交到了servlet/upload?type=image&CKEditor=content&CKEditorFuncNum=1&langCode=zh-cn
* 这里面的CKEditorFuncNum是页面传过来的回调方法,在上传成功后应该回调这个方法,使生成的图片在预览窗口进行显示
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String type = request.getParameter("type");
FileItemFactory itemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(itemFactory);
try {
FileItemIterator itemIterator = servletFileUpload.getItemIterator(request);
//因为ckeditor只是上传文件,所以这里就可以这样写了
if (itemIterator.hasNext()) {
FileItemStream itemStream = itemIterator.next();
String name = itemStream.getName();
InputStream inputStream = itemStream.openStream();
String tagName = getTagName(name);
if (allowedImages.contains(tagName) && "image".equals(type)) {
String fileName = this.geneFileName(tagName);
this.upload(inputStream, fileName);
String callback = request.getParameter("CKEditorFuncNum");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("<script type=\"text/javascript\">");
out.write("window.parent.CKEDITOR.tools.callFunction("+callback+",'ckeditor/upload/"+fileName+"',''"+")");
out.write("</script>");
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
String allowedImage = config.getInitParameter("allowedImage");
String[] images = allowedImage.split(",");
for (String image:images)
allowedImages.add(image);
uploadPath = config.getServletContext().getRealPath("/ckeditor/upload");
}
private String getTagName(String fileName) {
int index = fileName.lastIndexOf(".")+1;
return fileName.substring(index);
}
private String geneFileName(String tagName) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return sdf.format(new Date()) + "." + tagName;
}
private void upload(InputStream inputStream, String fileName) throws IOException {
File file = new File(uploadPath, fileName);
OutputStream os = new FileOutputStream(file);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
inputStream.close();
os.close();
}
}
web.xml:
<?xml version="1.0" encoding="GB18030"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>com.tiantian.ext.servlet.Upload</servlet-class>
<init-param>
<param-name>allowedImage</param-name>
<param-value>jpg,jpeg,gif,png</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/servlet/upload</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
分享到:
相关推荐
本文将深入探讨如何在Java应用中实现CKEditor的图片上传功能。 首先,我们需要理解CKEditor的基本工作原理。CKEditor本身是一个JavaScript库,通过在前端创建一个可编辑的区域,用户可以在此区域内输入文本、插入...
在Java中,文件上传通常使用Servlet API或者第三方库如Apache Commons FileUpload来实现。`FileUploadUtil`可能包含了解析HTTP请求中的多部分数据,将接收到的文件保存到服务器的逻辑。它可能会包含以下方法: 1. `...
在这个特定的场景中,我们关注的是CKEditor如何实现在线上传图片和Flash文件的功能。 首先,让我们详细了解一下CKEditor的图片上传功能。CKEditor内置了一个图片浏览器插件,允许用户直接在编辑器内部选择本地图片...
本教程将详细介绍如何在Struts2框架下配置和使用Ckeditor实现图片上传功能。 **一、Ckeditor简介** Ckeditor是一款开源的JavaScript富文本编辑器,提供了丰富的编辑功能,如字体样式、颜色调整、图片插入等。它通过...
这个整合的jar包提供了在Java环境中使用这两款工具的便利,使开发者能够轻松地在Web应用中实现文本编辑和文件上传的功能。 CKEditor是一款流行的开源JavaScript富文本编辑器,版本3.35是其在2010年发布的一个稳定...
Action需要实现文件上传的支持,例如使用Apache Commons FileUpload库处理multipart/form-data类型的请求。 3. **处理文件上传**:在Action中,读取上传的文件,将其保存到服务器的指定目录,并生成唯一的文件名以...
在JSP中处理文件上传通常会用到Servlet和Apache的Commons FileUpload库。Servlet是Java中的服务器端组件,负责处理HTTP请求,而FileUpload库则提供了方便的API来解析上传的多部分表单数据。 文件上传流程通常包括...
**图片和文档上传**:在Java Web应用中,文件上传通常使用Apache Commons FileUpload库来处理多部分HTTP请求。Struts2的FileUpload插件则提供了更友好的集成方式。图片和文档首先被临时存储在服务器的某个目录,然后...
1. **上传下载包**:在JSP中实现文件上传功能,通常会用到Apache Commons FileUpload库。这个库提供了处理HTTP多部分请求(multipart/form-data)的能力,允许用户通过表单上传文件。同时,可能还需要Apache Commons...
这通常涉及到文件上传组件的选择,如Apache Commons FileUpload库,以及服务器端的文件存储策略,如保存到特定目录或者云存储服务。同时,系统还实现了图片预览,可能通过JavaScript或者AJAX技术在用户上传后即时...
6. **附件和文件上传**:为了支持附件和文件上传,项目可能使用了Apache Commons FileUpload库或者其他类似的工具。用户可以上传文件,这些文件会被存储在服务器的某个位置,并且可能在数据库中保存其元数据,如...
开发者通常会使用Apache Commons FileUpload库或其他类似的库来处理文件上传,确保文件大小限制、类型检查和安全上传。 **6. 时间选择器** 时间选择器是用户界面中的一个组件,用于方便用户选取日期或时间。在房产...
在本文中,我们将深入探讨B2C购物网站的设计,以及其中涉及的关键技术——SpringMVC、MySQL和相关功能实现,如后台分页、富文本编辑器、附件与文件上传及时间选择器等。 B2C(Business-to-Consumer)购物网站是一种...
使用Apache Commons FileUpload库可以帮助简化文件上传的处理。 5. **与服务器通信**:FCKeditor通过XMLHttpRequest与服务器进行通信,例如获取或更新文本内容。你需要在服务器端提供相应的接口,通常是Servlet或...
- **处理文件上传**:在后台Java代码中,你需要实现一个Servlet来处理FCKEditor提交的文件上传请求,使用Apache Commons库处理文件上传并保存到服务器。 - **数据交互**:你可以通过FCKEditor的JavaScript API与Java...
3. 作业提交模块:学生可以在系统中查看并提交作业,可能需要支持文件上传功能,这可以通过Apache Commons FileUpload库来实现。同时,可能需要对文件格式和大小进行限制。 4. 自动批改模块:如果系统具备自动批改...
为了实现这一功能,开发者通常会使用Apache Commons FileUpload或SpringMVC内置的MultipartFile处理多部分表单数据。同时,文件通常会被存储在服务器的特定目录或云存储服务中,以供后续访问和下载。 **时间选择器*...
开发人员可以使用JSP内置的对象如HttpServletRequest来处理上传请求,同时可能需要使用第三方库如Apache Commons FileUpload来处理大文件上传和多文件上传。 文件下载功能则是反向的过程,通过HTTP的GET请求,...
4. **图片上传**:系统应包含一个图片上传组件,如利用Apache Commons FileUpload库处理文件上传,可能还需要考虑图片的预览、裁剪、压缩等功能。 5. **新闻展示**:根据新闻类别和时间线展示新闻,可能需要分页和...
系统可能使用了Apache Commons FileUpload或者SpringMVC自带的MultiPartResolver来处理文件上传,同时,为了优化存储和访问,可能还实现了文件的分类、版本控制、权限管理等功能。 时间选择器则为用户提供了一个...