struts2 之 文件上传 ,struts2文件上传,批量文件上传

1. 文件上传有2种方式:

    一种方式以流的形式提交,到服务器后自己解析http协议获取上传内容。

    二种方式使用第三方提供的插件来完成文件上传:smartfileupload,commons-fileupload.

2.使用 commons- fileupload实现文件上传的步骤:
  a) 导入commons-fileupload,和 commons-io两个包。

  b) 编写jsp页面,页面表单必须是post提交方式,必须enctype设置为:multiparty/form-data.

<form action="upload" enctype="multipart/form-data" method="post">
   用户名:<input type="text" name="username"/><br>
   文件:<input type="file" name="file"/><input type="submit" value="上传"/>
   </form>

  c) 编写Servlet:

@WebServlet("/upload")
public class UploadServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //创建磁盘工厂对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置缓存区大小
        factory.setSizeThreshold(1024*1024);
        //设置文件上传的临时目录
        factory.setRepository(new File("c:/"));
        //创建文件上传处理器
        ServletFileUpload handler = new ServletFileUpload(factory);
        try {
            //将文件上传表单 解析为FileItem,一个FileItem是一个表单项
            List<FileItem> list = handler.parseRequest(req);
            for(FileItem item:list){
                if(item.isFormField()){//普通表单项
                    //item.getFieldName()获取表单项的名称
                    //iem.getString() 获取表单项的值
                    System.out.println(item.getFieldName()+"-----"+item.getString());
                }else{//文件上传项
                    //item.getName()获取文件名---不同浏览器可能不一样
                    //item.getString() 获取文件内容
                    String path=req.getRealPath("/upload");
                    //将文件内容写入指定位置
                    item.write(new File(path,item.getName()));
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 在struts2中,已经将文件上传功能继成到了fileload拦截器中,该拦截器默认被引用,所以可以直接开发文件上传功能。默认情况下上传的文件最大为2m,如果大于默认需要重新设置。

实现步骤如下:

a) 编写jsp:

<form action="upload.action" enctype="multipart/form-data" method="post">
   文件:<input type="file" name="file"/><input type="submit" value="上传"/>
   </form>

b)编写action:

public class UploadAction {
    //file文件 的名称和表单域名相同
    private File file;
    //文件名 是由  表单域名+FileName组成
    private String fileFileName;
    //文件类型 是由  表单域名+ContentType组成
    private String fileContentType;
    //上传处理
    public String upload() throws IOException{
        HttpServletRequest req = ServletActionContext.getRequest();
        String path = req.getRealPath("/upload");
        //自己可以通过io流来实现
        FileUtils.copyFile(file, new File(path,fileFileName));
        return Action.SUCCESS;
    }
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
}

c)配置:

<struts>
    <!-- 设置总文件大小 
    struts.multipart.maxSize>=maximumSize
        -->
    <constant name="struts.multipart.maxSize" value="209715200"></constant>
    <package name="default" namespace="/" extends="struts-default">
        <action name="upload" class="cn.sxt.action.UploadAction" method="upload">
            <interceptor-ref name="fileUpload">
                <!-- 设置上传文件的大小  单个文件大小 -->
                <param name="maximumSize">209715200</param>
            </interceptor-ref>
            <interceptor-ref name="basicStack"></interceptor-ref>
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

5. 批量的文件上传:

public class BatchUploadAction {

   //file文件 的名称和表单域名相同

   private File file[];

   //文件名 是由  表单域名+FileName组成

   private String fileFileName[];

   //文件类型 是由  表单域名+ContentType组成

   private String fileContentType[];

   //上传处理

   public String upload() throws IOException{

      HttpServletRequest req = ServletActionContext.getRequest();

      String path = req.getRealPath("/upload");

      for(int i=0;i<file.length;i++)

         FileUtils.copyFile(file[i], new File(path,fileFileName[i]));

      return Action.SUCCESS;

   }

   public File[] getFile() {

      return file;

   }

   public void setFile(File[] file) {

      this.file = file;

   }

   public String[] getFileFileName() {

      return fileFileName;

   }

   public void setFileFileName(String[] fileFileName) {

      this.fileFileName = fileFileName;

   }

   public String[] getFileContentType() {

      return fileContentType;

   }

   public void setFileContentType(String[] fileContentType) {

      this.fileContentType = fileContentType;

   }

}

  

  

原文地址:https://www.cnblogs.com/forever2h/p/6733944.html