浏览 7140 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-22
最后修改:2010-09-14
http://www.kindsoft.net/下来用了用,发现上传功能只有php的,郁闷。。。
最近公司要换图文混排 ,发现kindEditor非常不错,下载
没办法自己写一个。。。 引用 upload.jsp
<%@ page pageEncoding="gbk"%> <%@page import="java.util.*,java.io.*, org.apache.commons.fileupload.FileItem, org.apache.commons.fileupload.FileUploadException, org.apache.commons.fileupload.disk.DiskFileItemFactory, org.apache.commons.fileupload.servlet.ServletFileUpload, java.util.concurrent.locks.*"%> <% String id = ""; String url = ""; String imgTitle = ""; String imgWidth = ""; String imgHeight = ""; String imgBorder = ""; String filePath = ""; String align = ""; // ************************************** // 初始化上传工厂对象 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置上传工厂对象限制 factory.setSizeThreshold(1024 * 1024 * 20); factory.setRepository(new File(request.getSession(true) .getServletContext().getRealPath("/"))); // 创建上传对象 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024 * 1024 * 20); List<FileItem> items = null; try { items = upload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(System.out); } for (Iterator<FileItem> i = items.iterator(); i.hasNext();) { FileItem item = i.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString("gbk"); if (name.equals("id")) { id = value; } else if (name.equals("imgTitle")) { imgTitle = value; } else if (name.equals("imgWidth")) { imgWidth = value; } else if (name.equals("imgHeight")) { imgHeight = value; } else if (name.equals("imgBorder")) { imgBorder = value; } else if (name.equals("align")) { align = value; } else if (name.equals("url")) { filePath = value; } } else { // 取得表单域名 String fieldName = item.getFieldName(); // 取得文件名 String fileName = item.getName(); // 取得文件类型 String contentType = item.getContentType(); final Lock lock = new ReentrantLock(); String newName = null; lock.lock(); try { //加锁为防止同一时间文件名冲突 newName = System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."), fileName.length()); } catch (Exception e) { e.printStackTrace(System.err); } finally { lock.unlock(); } filePath = "./ke_upload/" + newName; FileOutputStream fos = new FileOutputStream(request .getSession().getServletContext().getRealPath("/") + "ke_upload\\" + newName); if (item.isInMemory()) { fos.write(item.get()); fos.close(); } else { InputStream in = item.getInputStream(); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { fos.write(buffer, 0, len); } in.close(); fos.close(); } } } out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>"); out.println("<script type='text/javascript'>"); out.println("parent.parent.KE.plugin['image'].insert('" + id + "','" + filePath + "','" + imgTitle + "','" + imgWidth + "','" + imgHeight + "','" + imgBorder + "','" + align + "');</script>"); out.println("</body></html>"); %> 代码完了,发在跟他的PHP文件一个目录就可以了 再把image.html文件的action一改,OK ! 拿到Struts2应用中, 问题又来了。。。 没办法一句一句的debug! 问题找到了,原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最后把HttpServletResquest封装成 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper 怪不得我的 ServletFileUpload.parseRequest(request)不行!!! 还我原来的request !!! 不过查看它的API 原来人家已经为咱做好了 呵呵,比原来的方便许多。 继续代码: 引用 struts2Upload.jsp
<%@ page language="java" pageEncoding="GBK"%> <%@page import="java.util.*,java.io.*, org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper, java.util.concurrent.locks.*"%> <% //Struts2 请求 包装过滤器 MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request; // 获得上传的文件名 String fileName = wrapper.getFileNames("imgFile")[0]; //获得未见过滤器 File file = wrapper.getFiles("imgFile")[0]; //----------- 重新构建上传文件名---------------------- final Lock lock = new ReentrantLock(); String newName = null; lock.lock(); try { //加锁为防止文件名重复 newName = System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."), fileName.length()); }finally { lock.unlock(); } //------------ 锁结束 ------------- //获取文件输出流 FileOutputStream fos = new FileOutputStream(request.getSession() .getServletContext().getRealPath("/") + "ke_upload\\" + newName); //设置 KE 中的图片文件地址 String newFileName = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/ke_upload/" + newName; byte[] buffer = new byte[1024]; //获取内存中当前文件输入流 InputStream in = new FileInputStream(file); try { int num = 0; while ((num = in.read(buffer)) > 0) { fos.write(buffer, 0, num); } } catch (Exception e) { e.printStackTrace(System.err); } finally { in.close(); fos.close(); } //发送给KE out.println("<html><head><title>Insert Image</title><meta http-equiv='content-type' content='text/html; charset=gbk'/></head><body>"); out.println("<script type='text/javascript'>"); out.println("parent.parent.KE.plugin['image'].insert('" + wrapper.getParameter("id") + "','" + newFileName + "','" + wrapper.getParameter("imgTitle") + "','" + wrapper.getParameter("imgWidth") + "','" + wrapper.getParameter("imgHeight") + "','" + wrapper.getParameter("imgBorder") + "','" + wrapper.getParameter("align") + "');</script>"); out.println("</body></html>"); %> 这回好了,问题解决了,大家多多提意见,那个后台图片管理用不到,就没写(估计写也写不出来,偶是PHP盲。。。) 最后该各位javaeyer今年技术飞涨,薪水飞涨。。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-15
out.println("parent.parent.KE.plugin['image'].insert('"
怎么是两个 parent 啊 应该是一个吧 我试了 谢谢分享~! jsp版 和struts2 中都用到你的东西了 嘿嘿 |
|
返回顶楼 | |
发表时间:2010-04-19
ztianlong 写道 out.println("parent.parent.KE.plugin['image'].insert('"
怎么是两个 parent 啊 应该是一个吧 我试了 谢谢分享~! jsp版 和struts2 中都用到你的东西了 嘿嘿 kindeditor3.4是两个parent。 kindeditor3.3是一个parent。 根据它的PHP_DEMO实现的. 呵呵,对你有用就好。 |
|
返回顶楼 | |
发表时间:2010-10-21
very very good!LZ解决了
ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); items为空的问题。敬礼! |
|
返回顶楼 | |
发表时间:2010-11-30
最后修改:2010-11-30
楼主,用你的struts2Upload.jsp上传本地图片时,还是提示“服务器发生故障”~~请问能否解释一下~~
如果把 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 里的/*改成其他的,又会抛出异常~~ |
|
返回顶楼 | |
发表时间:2010-12-02
cecil2007 写道 楼主,用你的struts2Upload.jsp上传本地图片时,还是提示“服务器发生故障”~~请问能否解释一下~~
如果把 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 里的/*改成其他的,又会抛出异常~~ 在我这里没有问题 ,把你的异常信息发一下. 你给我web.xml内容没有用 . 不过你可以尝试使用火狐的filebug去分析一下 看看你的请求数据是什么。 也可以在struts2Upload.jsp里写日志 查看每行运行结果。 |
|
返回顶楼 | |
发表时间:2011-01-05
lz啊..我的问题跟楼上一样,,也是服务器出现故障了的说
错误代码如下: 2011-1-5 16:25:15 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper at org.apache.jsp.editor.plugins.image.struts2Upload_jsp._jspService(struts2Upload_jsp.java:61) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619) |
|
返回顶楼 | |
发表时间:2011-01-26
gua_ma 写道 lz啊..我的问题跟楼上一样,,也是服务器出现故障了的说
如果你用的是Struts2使用struts2Upload.jsp
错误代码如下: 2011-1-5 16:25:15 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper at org.apache.jsp.editor.plugins.image.struts2Upload_jsp._jspService(struts2Upload_jsp.java:61) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619) 若果你没用Struts2使用upload.jsp |
|
返回顶楼 | |