struts2.0关于请求jsp方式上传的问题

来源:互联网 发布:shadowsock mac 编辑:程序博客网 时间:2024/05/21 07:10

最近在项目中用到了struts2.0,并在页面中嵌入了一个Kindeditor的编辑器,Kindeditor的插入图片功能先通过一个jsp将图片上传到服务器,然后获取图片的url进行显示,然而编码时图片总是无法上传到服务器,代码如下,经调试发现fileItems总是为空

<%@page contentType="text/html; charset=UTF-8"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.Iterator"%>
<%
try{
//文件保存目录路径
ServletContext sc=this.getServletContext();
String SavePath = sc.getRealPath("/")+"//rules//uploaded//";
System.out.println("SavePath:"+SavePath);
File myFilePath = new File(SavePath);
if (!myFilePath.exists())
        myFilePath.mkdir();

//文件保存目录URL
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
String SaveUrl=basePath+ "rules/uploaded/";
System.out.println("SaveUrl:"+SaveUrl);
//定义允许上传的文件扩展名
ArrayList ExtArr=new ArrayList();
ExtArr.add("gif");
ExtArr.add("jpg");
ExtArr.add("png");
ExtArr.add("bmp");

DiskFileUpload upload = new DiskFileUpload();

System.out.println("rquest:"+request.getRequestURL());
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(2 * 1024 * 1024);
upload.setSizeThreshold(1 * 1024 * 1024);
upload.setRepositoryPath(System.getProperty("java.io.tmpdir"));

 


String FileWidth ="";
String FileHeight = "";
String FileBorder = "";
String FileTitle = "";
String FileAlign = "";
String FileHspace = "";
String FileVspace = "";


List fileItems = upload.parseRequest(request);//fileItems总是为空
for (Iterator iter = fileItems.iterator(); iter.hasNext(); )
{
FileItem item = (FileItem) iter.next();
if (item.isFormField()&&item.getName()!=null) {
  if(item.getName().equals("imgWidth"))
     FileWidth=item.getString();
  else if(item.getName().equals("imgHeight"))
     FileHeight=item.getString();
  else if(item.getName().equals("imgBorder"))
     FileBorder=item.getString();
  else if(item.getName().equals("imgTitle"))
     FileTitle=item.getString();
  else if(item.getName().equals("imgAlign"))
     FileAlign=item.getString();
  else if(item.getName().equals("imgHspace"))
     FileHspace=item.getString();
  else if(item.getName().equals("imgVspace"))
     FileVspace=item.getString();
}
if (!item.isFormField()) {
  String fileName = item.getName();
  int pos=fileName.lastIndexOf(".");
  if(pos<=0 || pos==fileName.length()-1)
   break;
  String fileType=fileName.substring(pos+1,fileName.length());
  if(fileType==null || fileType.equals(""))
   break;
  if(ExtArr.indexOf(fileType.toLowerCase())<0)
  {
    out.println( "<script type=/"text/javascript/">alert(/"上传文件扩展名是不允许的扩展名。/");parent.KindDisableMenu();parent.KindReloadIframe();</script>");
  }
  long fileSize = item.getSize();

  InputStream inStream = item.getInputStream();
  String newFileName=System.currentTimeMillis()+"."+fileType;
  FileOutputStream fos = new FileOutputStream(SavePath +newFileName );

  int bytesRead;
    byte[] buf = new byte[4 * 1024]; // 4K buffer
    while ((bytesRead = inStream.read(buf)) != -1)
    {
        fos.write(buf, 0, bytesRead);
    }
    fos.flush();
    fos.close();
    inStream.close();

    String FileUrl = SaveUrl + newFileName;

 out.println( "<html>");
 out.println( "<head>");
 out.println( "<title></title>");
 out.println( "<meta http-equiv=/"content-type/" content=/"text/html; charset=UTF-8/">");
 out.println( "</head>");
 out.println( "<body oncontextmenu=false>");
 out.println( "<script type=/"text/javascript/">parent.KindInsertImage(/"" + FileUrl + "/",/"" + FileWidth + "/",/"" + FileHeight + "/",/"" + FileBorder + "/",/"" + FileTitle + "/",/"" + FileAlign + "/",/"" + FileHspace + "/",/"" + FileVspace + "/");</script>");
 out.println( "</body>");
 out.println( "</html>");
 }
}
}catch(Exception e)
{
 out.println( "<script type=/"text/javascript/">alert(/"" +e.getMessage()  + "/");parent.KindDisableMenu();parent.KindReloadIframe();</script>");
}
%>

遍寻解决方案,考虑到正常使用struts2.0的拦截器上传并未出现此类情况,考虑请求被拦截,遂修改web.xml,由

<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>

修改为:

<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>*.action</url-pattern>
  </filter-mapping>

问题解决!