今天原本想完成一个webwork实现文件上传的功能,原来的实现很是复杂,另外弹出一个页面,使用apache――upload组件将要上传的图片先提交到服务器,然后这个jsp的页面返回该文件的服务器的路径,提交表单接受这个这个参数,然后提交信息。
现在看这种实现过于复杂,因为种种原因一直没有修改,现在终于提出要修改这个上传实现。
webwork的拦截器实现了文件的上传,这样的例子也很多,很快按照一个例子,在一个测试web程序中部署,顺利通过。
但在应用到现在的网站时候,却出现了一个这样的问题,上传文件被拦截中断执行,报错的异常信息是Content-Type not allowed,无论上传什么类型文件都是这个异常。
下面是全部的代码,这已经是最简单的实现了,但这个测试例子在单独的环境中运行正常,一旦部署到现在的web应用程序中就无法正常运行,查找了很多资料,也专门加了一段content allowed types配置,还是无法正常运行。
两个环境唯一的区别是一个是webwork的2.2.4的版本,一个是webwork2.2的测试版本,由于程序已经很到,很难全部迁移到webwork2.2.4版本上,请教一下,这个bug是不是webwork测试版本的?如果是,除了升级webwork版本外,还有什么办法?如果不是,是不是我的程序写法的原因,在webwork的测试版本是不是有特殊的一些配置和写法?请各位大侠不吝赐教!
?
页面代码:
?
<%@ page contentType="text/html; charset=GBK"%> <%@ taglib prefix="ww" uri="webwork"%> <html> <head> <title>文件上传</title> </head> <body> <form method="POST" name="form1" ENCTYPE="multipart/form-data"> <table width="95%" border="0" cellpadding="5" cellspacing="0"> <tr> <td>产品图片:</td> <td align="left" class="xxbg" colspan="2"> <input type="file" name="pic" size="20"> </td> </tr> </table> </form> </body> </html> <SCRIPT LANGUAGE="JavaScript"> function sub(){ form1.action = "uploadtest.action"; form1.submit();} </SCRIPT>
?
配置文件:
?
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.1.dtd"> <xwork> <include file="webwork-default.xml" /> <package name="uploadtest" extends="webwork-default"> <action name="uploadtest" class="com.shouzhong.test.UplaodAction" method="uploadtest"> <result name="success" type="dispatcher"> <param name="location"> /result.jsp </param> </result> <interceptor-ref name= "fileUpload "/> <interceptor-ref name= "basicStack "/> </action> </package> </xwork>
?
?
类文件:
?
package com.shouzhong.test; import java.util.*; import org.apache.commons.logging.*; import com.opensymphony.xwork.*; import com.core.web.Action; import com.shouzhong.map.*; import javax.servlet.http.HttpServletRequest; import com.opensymphony.webwork.ServletActionContext; import javax.servlet.http.HttpSession; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; /** * <p> * Title: * </p> * <p> * Description: * </p> * <p> * Copyright: Copyright (c) 2007 * </p> * <p> * Company: * </p> * * @author liuwei * @version 1.0 */ public class UplaodAction extends Action { public static Log log = LogFactory.getLog(UplaodAction.class); private File pic; private String picContentType; private String picFileName; public String uploadtest() throws Exception { try { System.out.println("in...................."); upload(pic, picFileName); } catch (Exception e) { } return SUCCESS; } public static String upload(File file, String filename) { String ret = null; try { if (file != null) { ret = "c:/" + filename; FileOutputStream outputStream = new FileOutputStream(ret); FileInputStream fileIn = new FileInputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = fileIn.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } fileIn.close(); outputStream.close(); } } catch (Exception ex) { ex.printStackTrace(); ret = null; } return ret; } public File getPic() { return pic; } public void setPic(File pic) { this.pic = pic; } public String getPicContentType() { return picContentType; } public void setPicContentType(String picContentType) { this.picContentType = picContentType; } public String getPicFileName() { return picFileName; } public void setPicFileName(String picFileName) { this.picFileName = picFileName; } }
?
?
?