先实现IO工具类
package per.xgt.IoUtil;
import java.io.InputStream;
import java.io.OutputStream;
public class IoUtil {
public static long copy(InputStream in, OutputStream out) throws Exception{
return copy((InputStream)in,(OutputStream)out,1024);
}
public static long copy(InputStream in,OutputStream out,int bufferSize) throws Exception {
return copy((InputStream) in,(OutputStream) out,bufferSize,0);
}
public static long copy(InputStream in,OutputStream out,int bufferSize,int flag){
if (bufferSize <= 0){
bufferSize = 1024;
}
byte[] buffer = new byte[bufferSize];
long size = 0L;
try {
boolean var7 = true;
int readSize;
while ((readSize = in.read(buffer)) != -1){
out.write(buffer,0,readSize);
size += (long)readSize;
out.flush();
}
} catch (Exception e){
System.out.println(e.getMessage());
}
return size;
}
}
再实现工具类ResponseUtil
package per.xgt.ReponseUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import per.xgt.IoUtil.IoUtil;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ResponseUtil {
public static void ResponseSetForFile(HttpServletResponse response,String fileName){
try {
fileName = URLEncoder.encode(fileName,"UTF-8");
} catch (Exception e){
System.out.println(e.getMessage());
}
response.setHeader("content-disposition", "attachment;filename="+fileName);
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
}
private void exportZip(List<Workbook> workbooks,String fileName,HttpServletResponse response){
try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())){
ZipEntry entry;
ByteArrayOutputStream byteOut;
ByteArrayInputStream byteIn;
int index =1;
for (Workbook workbook : workbooks){
entry = new ZipEntry(fileName+"_"+(index++)+".xlsx");
zipOut.putNextEntry(entry);
byteOut = new ByteArrayOutputStream();
workbook.write(byteOut);
byteIn = new ByteArrayInputStream(byteOut.toByteArray());
IoUtil.copy(byteIn, byteOut);
}
zipOut.flush();
} catch (Exception e){
System.out.println(e.getMessage());
}
}
}