Kindeditor(jsp)与SSH三大框架整合上传图片出错问题解决方案
2013-04-20 11:42
866 查看
最近使用kindeditor4.1编辑文章,发现上传图片发生错误,而上传flash文件以及媒体文件可以上传成功。我也不得其解,通过查找大量资料得知,是struts框架对request对象做了封装,upload_json.jsp文件可以不用任何修改,修改web.xml文件中有关action路径就可以了,如下: <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
就可以正常得到request中的内容.
但是,却不能过滤掉.jsp文件,也就是说jsp文件没有通过配置struts.xml的话,不能访问。在这里我根据源文件重写了upload_json.jsp文件,不必修改web.xml配置文件。这里有个缺陷,flash以及media类型不能上传。
upload_json.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.io.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page
import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper"%>
<%
/**
013
* KindEditor JSP
014
*
015
* 本JSP程序是演示程序,建议不要直接在实际项目中使用。
016
* 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
017
*
018
*/
//文件保存目录路径
String savePath = pageContext.getServletContext().getRealPath("/") + "attached/";
//文件保存目录URL
String saveUrl = request.getContextPath() + "/attached/";
//定义允许上传的文件扩展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");
extMap.put("flash", "swf,flv");
extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
//最大文件大小
long maxSize = 300000000;
response.setContentType("text/html; charset=UTF-8");
if(!ServletFileUpload.isMultipartContent(request)){
out.println(getError("请选择文件。"));
return;
}
//检查目录
File uploadDir = new File(savePath);
if(!uploadDir.isDirectory()){
out.println(getError("上传目录不存在。"));
return;
}
//检查目录写权限
if(!uploadDir.canWrite()){
out.println(getError("上传目录没有写权限。"));
return;
}
String dirName = request.getParameter("dir");
if (dirName == null) {
dirName = "image";
}
if(!extMap.containsKey(dirName)){
out.println(getError("目录名不正确。"));
return;
}
//创建文件夹
savePath += dirName + "/";
saveUrl += dirName + "/";
File saveDirFile = new File(savePath);
if (!saveDirFile.exists()) {
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";
File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
//获得上传 的文件名
String fileName = wrapper.getFileNames("imgFile")[0];
//获得文件过滤器
File file = wrapper.getFiles("imgFile")[0];
//检查文件大小
if(file.length() > maxSize){
out.println(getError("上传文件大小超过限制。"));
return;
}
//检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
return;
}
//重构上传文件名
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
byte[] buffer = new byte[1024];
//获取文件输出流
FileOutputStream fos = new FileOutputStream(savePath + newFileName);
//获取内存中当前文件输入流
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
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl + newFileName);
out.println(obj.toJSONString());
%>
<%!
private String getError(String message) {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toJSONString();
}
%>
转自:http://my.oschina.net/larch/blog/69115
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
就可以正常得到request中的内容.
但是,却不能过滤掉.jsp文件,也就是说jsp文件没有通过配置struts.xml的话,不能访问。在这里我根据源文件重写了upload_json.jsp文件,不必修改web.xml配置文件。这里有个缺陷,flash以及media类型不能上传。
upload_json.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.io.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page
import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper"%>
<%
/**
013
* KindEditor JSP
014
*
015
* 本JSP程序是演示程序,建议不要直接在实际项目中使用。
016
* 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
017
*
018
*/
//文件保存目录路径
String savePath = pageContext.getServletContext().getRealPath("/") + "attached/";
//文件保存目录URL
String saveUrl = request.getContextPath() + "/attached/";
//定义允许上传的文件扩展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");
extMap.put("flash", "swf,flv");
extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
//最大文件大小
long maxSize = 300000000;
response.setContentType("text/html; charset=UTF-8");
if(!ServletFileUpload.isMultipartContent(request)){
out.println(getError("请选择文件。"));
return;
}
//检查目录
File uploadDir = new File(savePath);
if(!uploadDir.isDirectory()){
out.println(getError("上传目录不存在。"));
return;
}
//检查目录写权限
if(!uploadDir.canWrite()){
out.println(getError("上传目录没有写权限。"));
return;
}
String dirName = request.getParameter("dir");
if (dirName == null) {
dirName = "image";
}
if(!extMap.containsKey(dirName)){
out.println(getError("目录名不正确。"));
return;
}
//创建文件夹
savePath += dirName + "/";
saveUrl += dirName + "/";
File saveDirFile = new File(savePath);
if (!saveDirFile.exists()) {
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";
File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
//获得上传 的文件名
String fileName = wrapper.getFileNames("imgFile")[0];
//获得文件过滤器
File file = wrapper.getFiles("imgFile")[0];
//检查文件大小
if(file.length() > maxSize){
out.println(getError("上传文件大小超过限制。"));
return;
}
//检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
return;
}
//重构上传文件名
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
byte[] buffer = new byte[1024];
//获取文件输出流
FileOutputStream fos = new FileOutputStream(savePath + newFileName);
//获取内存中当前文件输入流
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
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl + newFileName);
out.println(obj.toJSONString());
%>
<%!
private String getError(String message) {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toJSONString();
}
%>
转自:http://my.oschina.net/larch/blog/69115
相关文章推荐
- Kindeditor(jsp)与SSH三大框架整合上传图片出错问 3ff8 题解决方案
- ssh三大框架简单整合,struts2整合JasperReport报表、图表,解决HTML显示图片不出来,PDF中文不显示的问题
- SSH整合之后解决Kindeditor图片上传功能失效的方案
- 整合三大框架出现的一些常见的问题及解决的方案
- 有关我在SSHD(SSH三大框架和DWR框架)整合过程中出现的中文乱码问题的解决
- 解决kindeditor与Struts2框架整合时无法上传本地图片的问题
- django 整合 kindeditor ,解决上传图片 csrf 验证问题
- 解决kindeditor与Struts2框架整合时无法上传本地图片的问题
- 解决kindeditor与Struts2框架整合时无法上传本地图片的问题 (1)
- 解决kindeditor与Struts2框架整合时无法上传本地图片的问题 (2)
- ssh三大框架整合时struts2遇到的简单又很容易忽视的问题
- jsp解决kindeditor在线编辑器struts图片上传问题
- SSM框架之关于使用JSP作为视图展示问题解决方案
- Kindeditor跨域上传图片在ASP.NET方案中的解决
- ueditor在struts2下图片上传出错的问题的解决办法
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方案
- Kindeditor编辑器 jsp上传错误解决方法 与struts2冲突整合
- 关于SSH项目整合Fckeditor上传图片问题
- 商城项目实战22:解决KindEditor上传图片浏览器兼容性问题
- ssh整合问题总结--在添加商品模块实现图片(文件)的上传