今天原本想完成一个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;
}
}