首页 > 其他分享 >struts中使用org.apache.commons.fileupload

struts中使用org.apache.commons.fileupload

时间:2023-06-15 11:32:35浏览次数:47  
标签:fileupload name struts commons action org apache import fu


struts的DownloadAction使用后发现,当我提取中文名的文件时,会转换成乱码(弹出的对话框为乱码),可能还没有研究明白,所以考虑用smartupload和commons-fileupload。

使用smartupload上传过大文件,或者多文件的时候可能出现CPU或内存占用过高的问题.并且:只有重新启动容器才能恢复正常!后决定用用commons-fileupload.

下载:下载地址:http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi,包内包含了API文档.(还有commons-beanutils) 在项目中添加下载的组件。

注意事项:

1.不要在jsp页面中使用struts得标签,使用后,通过正常方式无法接收到相关参数。(不用<html:form>)

2.如果使用action,不要使action继承其他得action,仅仅继承org.apache.struts.action.Action;并且在配置文件中,不要给action配置actionForm,否则通过一下方法: 

DiskFileUpload fu = new DiskFileUpload();
             // 设置最大文件尺寸,这里是4MB
             fu.setSizeMax(41943040);
             // 设置缓冲区大小,这里是4kb
             fu.setSizeThreshold(2048);
             // 设置临时目录:
             fu.setRepositoryPath(tempPath);
             // 得到所有的文件:
             List fileItems = fu.parseRequest(request);
             Iterator i = fileItems.iterator();

接收到得list是null。不关联actionform即可正常使用。

例子:

一。创建defalut.jsp

<%@ page language="java" pageEncoding="gb2312"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<body>
 This a struts page.
 <br>
 <form action="/abc/default.do" method="post" name="uploadform"
  enctype="multipart/form-data">
  <br>

  文件1:

<input name="file1" size="40" type="file">
  <br>

  文件2:

<input name="file2" size="40" type="file">
  <br>
  <input name="upload" type="submit" value="开始上传" />
 </form>
</body>
</html:html>

二。创建FormfileAction 继承Action

import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class FormfileAction extends Action {
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  
  DiskFileUpload fu = new DiskFileUpload();
        // 设置最大文件尺寸,这里是4MB
        fu.setSizeMax(41943040);
        // 设置缓冲区大小,这里是4kb
        fu.setSizeThreshold(4000);
        // 设置临时目录:
        fu.setRepositoryPath("c:\\temp\\oo");
        // 得到所有的文件:
        List fileItems;
  try {
   fileItems = fu.parseRequest(request);
   Iterator iter = fileItems.iterator();
   while(iter.hasNext()){
     FileItem item = (FileItem) iter.next();
     if (!item.isFormField()) {
      String name = item.getName();
        long size = item.getSize();
        if((name==null||name.equals("")) && size==0)
         continue;
        System.out.println("file name:" +name);
        System.out.println("file size:" +size);
        name = name.replace(":","_");
        name = name.replace("\\","_");
        try {
      item.write(new File("F:\\"+ name));
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     }
   }
  } catch (FileUploadException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
        
  System.out.println("execute");
  
  
  return null;
 }
 
}

三。配置struts-config.xml:

<action
      path="/default"
      scope="request"
      type="com.yourcompany.struts.action.FormfileAction" />

标签:fileupload,name,struts,commons,action,org,apache,import,fu
From: https://blog.51cto.com/u_16065168/6485829

相关文章

  • commons.FileUpload的使用
    UsingFileUpload使用FileUploadFileUploadcanbeusedinanumberofdifferentways,dependingupontherequirementsofyourapplication.Inthesimplestcase,youwillcallasinglemethodtoparsetheservletrequest,andthenprocessthelistofitems......
  • Struts1.x系列教程(14):动态Form
    上一篇:Struts1.x系列教程(13):国际化一、动态Form简介   虽然ActionForm功能强大,但有些时候使用起来有些麻烦。如每建立一个用户录入界面(JSP页面),就得建立一个ActionForm子类来和这个页面对应。当然,我们可以采用嵌套属性从一定程度上弥补这个问题。但是在建立新的用户录入界面时,......
  • 深入探讨struts的ActionMessages消息机制
     深入探讨struts的ActionMessages消息机制 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://leaze.blog.51cto.com/83088/51750   在介绍ActionMessages前,我觉得有必要先介绍一下ActionMessages的数......
  • Java反序列化Commons-Collection篇06-CC5链
    <1>环境分析jdk:jdk8u65CC:Commons-Collections3.2.1pom.xml添加<dependencies><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId>......
  • Java反序列化之Commons-Collection篇05-CC2链
    <1>环境分析jdk:jdk8u65CC:Commons-Collections4.0pom.xml添加<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.0</version></dependency&g......
  • struts(il8n) 实现国际化的一个例子
    struts(il8n)实现国际化的一个例子[code]struts利用在session中放一个local对象来达到设置当前语言您的目的,默认的情况下,struts根据网页向后台提交时所包含的编码信息来提供缺省的local对象。这就是我们为什么可以通过更改网页显示语言设置,就能显示不同......
  • struts2 intercepter简单例子
    玩了一天终于把struts2的intercepter搞明白了,有那么点小兴奋,呵呵。下面把俺的成果分享一下:1.在注册页面中(index.jsp)注册一下:  <%session.setAttribute("user","lzw");%>2.在登录界面(login.jsp)登录:<formaction="login.action"method="post"><......
  • Java反序列化之Commons-Collection篇04-CC4链
    <1>环境分析因为CommonsCollections4除4.0的其他版本去掉了InvokerTransformer不再继承Serializable,导致无法序列化。同时CommonsCollections4的版本TransformingComparator继承了Serializable接口,而CommonsCollections3里是没有的。这个就提供了一个攻击的路径jd......
  • 关于struts中的ActionError和ActionMessage的占位符{0}的使用
    先说说ActionError,  一般的情况下我们会自己写的ActionForm的validate方法来对提交过来的表单做验证 开始的时候我也是在想这个仅仅是return了一个ActionErrors 这里是我的form源码packagecom.little.struts.form;publicclassHelloFormextendsActionForm{private......
  • struts的ActionErrors和ActionMessage写法
    我在Action中的ActionErrors的实例中add了一系列的ActionError, 在JSP中用<html:errors/>显示,但什么都没有! 是不是ActionErrors.add("abc", ActionError)中的第一个字符串“abc”要添加在什么资源文件里呀?怎么建立资源文件,怎么添加?怎么显示? 我非常迷惑,请各位赐教,谢谢!   A......