首页 > 代码库 > struts2实现文件批量下载

struts2实现文件批量下载

         大家都知道struts2提供了文件下载的功能,很方便很好用。废话不多说直接开始。


        首先我们先对struts.xml进行配置,struts2的result 类型设为stream,请看如下配置:

<span style="font-size:18px;">        <result name="toDownload" type="stream">
           <param name="bufferSize">2048</param>
            </result></span>

       在这要介绍一下几个字段属性:

       1、contentType,这个和文件上传的一样,就是要下载文件的格式;

        2、contentLength:这是要下载文件的文件大小;

        3、contentDisposition:这个有两个属性:1、inline;2、attachment contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择,要想弹出下载框就用附件的形式attachment

              4、bufferSize:这是下载缓冲区的大小。(默认1024)

         5、inputName:在定义输入流的名字。(默认inputStream)

    


    这些属性可以在配置文件中定义,也可以在我们的java文件中定义,在这里我用的是在java文件中给以getter方法定义

private String contentType;
	public String getContentType() {
		return contentType;
	}
	public long getContentLength() {
		return contentLength;
	}
	public String getContentDisposition() {
		return contentDisposition;
	}
	private long contentLength;
	private String contentDisposition;
	private InputStream inputStream;
	public InputStream getInputStream() {
		return inputStream;
	}
文件批量下载需要用到ZipOutputStream这个的用法大家可以到网上自行百度。

下面贴上action内代码:

public String download()throws Exception{
	
	String FilePath= ServletActionContext.getServletContext()//获取路径
	   .getRealPath("/images/");
		File zipFile=new File(ServletActionContext.getServletContext()//定义所要输入文件的zip文件
				   .getRealPath("images/testdownload/zipFile.zip"));
		ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(zipFile));
		 int temp = 0 ; 
	
		 FileInputStream input=null;
		for (int i = 0; i < fileName.length; i++) {
			File Files=new File(FilePath+"\\"+fileName[i]);
			 input=new FileInputStream(Files);
			zos.putNextEntry(new ZipEntry(Files.getName()+File.separator+fileName[i]));//将文件加入到Entry中
			 while((temp=input.read())!=-1){ // 读取内容  
                 zos.write(temp) ;    // 压缩输出  
             }
			
		}
		
    input.close();
	zos.close();
	 contentType="application/x-zip-compressed";//设定文件类型为.zip文件
	contentDisposition="attachment;filename=test.zip";//设定文件名为test.zip
		inputStream=new FileInputStream(zipFile); //定义流
		System.out.println(inputStream);
		contentLength=inputStream.available();
	
	return"toDownload";
 }

这里使用的是零时文件的形式,在方法调用的时候把文件夹清空是必要的,这里没有写。


struts2实现文件批量下载