做文件上传时,在其他项目里没问题。 这个就出问题了,感觉是被struts拦截了。最开始以为是jar包冲突,后来只留了一个版本的。发现还是有这个问题。注:上传问题,没有使用struts的
代码段:
public class AServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
File tmpDir = null;//初始化上传文件的临时存放目录
File saveDir = null;//初始化上传文件后的保存目录
public AServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象
dff.setRepository(tmpDir);//指定上传文件的临时目录
dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象
sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸
sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸
FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合
int i = 1;
while(fii.hasNext()){
FileItemStream fis = fii.next();//从集合中获得一个文件流
if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域
String fileName = fis.getName().substring(fis.getName().lastIndexOf(""));//获得上传文件的文件名
fileName=i+".jpg";
BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"/\\"+fileName)));//获得文件输出流
Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹
i++;
}
}
response.getWriter().println("File upload successfully!!!");//终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
}
}catch(Exception e){
e.printStackTrace();
}
}
public void init() throws ServletException {
/* 对上传文件夹和临时文件夹进行初始化
*
*/
super.init();
String tmpPath = "c://tmpdir//";
String savePath = "c:///tmpdir//";
tmpDir = new File(tmpPath);
saveDir = new File(savePath);
if(!tmpDir.isDirectory())
tmpDir.mkdir();
if(!saveDir.isDirectory())
saveDir.mkdir();
}
}
struts片段:
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.multipart.maxSize" value="104857600"></constant>
<constant name="struts.multipart.parser" value="jakarta"></constant>
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.ognl.allowStaticMethodAccess" value="false" />
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="ucapInterceptor" class="com.linewell.ucap.interceptor.UcapInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="ucapStack">
<interceptor-ref name="ucapInterceptor">
</interceptor-ref>
<!-- 防止表单重复提交 -->
<!--<interceptor-ref name="token"></interceptor-ref> -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="ucapStack"></default-interceptor-ref>
<!-- 全局跳转 -->
<global-results>
<result name="login" type="redirect">/login.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
</global-results>
<!-- 全局异常-->
<global-exception-mappings>
<exception-mapping result="error" exception="com.linewell.ucap.resource.ManageException">
</exception-mapping>
</global-exception-mappings>
<action name="BaseAction" class="com.linewell.ucap.action.base.BaseAction">
<result name="success">/result.jsp</result>
</action>
xml片段:
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>com.linewell.dw.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>