JAvaマルチexcelダウンロードzip圧縮パッケージに打つファイルを作成してブラウザに応答する(3)


ブラウザの端点でダウンロードをクリックすると、zip圧縮パッケージがダウンロードされ、複数のExcelファイルが含まれます.
私はひとまずプログラムから圧縮パッケージをダウンロードすることを3つのタイプに分けました.すなわち、3ステップダウンロード、2ステップダウンロード、1ステップダウンロードです.3ステップダウンロードとは、まずデータベースからデータを読み取り、ファイルに書き、ファイルをローカルディスクにダウンロードすることです.2つ目のステップは、ファイルを圧縮パッケージにすることです.3つ目のステップは、圧縮パッケージをプログラムに読み込んでブラウザに応答することです.2ステップダウンロードとは、データベースからデータを読み取り、ファイルに書いて圧縮パッケージにし、圧縮パッケージをローカルディスクにダウンロードすることです.これが最初のステップです.2つ目のステップは、圧縮パッケージをプログラムに読み込んでブラウザに応答することです.ワンステップダウンロードとは、プログラムがデータベースからデータを読み取り、ファイルに書き、ストリームに変換し、ブラウザに応答し、ローカルディスクに書く必要がなく、メモリにのみ圧縮パッケージを出力することです.
今回はまず、複数のExcelファイルをZip圧縮パッケージにした場合を例に、他のファイル形式を発表します.
3.ワンステップダウンロード
プロセス:プログラムでExcelファイルを生成し、ByteOutputStreamにストリームを配置し、byte[]配列にストリームを配置し、zipEntryに配列を書き、最後にzip圧縮パケットのストリームを新しいByteOutputStreamにキャッシュし(ByteArrayOutputStreamでもよい)、新しいストリームをbyte[]に変換し、ブラウザに応答する.
特徴:ファイルはプログラムの中で生成します;マルチファイルフォーマットをサポートする暫定Excelを例に
利点:ローカルサーバに書き込む必要がなく、ディスクリソースを消費しない
難点:ワークブックの書き方zipエンティティの追加プロパティ;IOストリームの特性
	@RequestMapping("settleTransfer_downLoad")
	@ResponseBody
	public void downLoad(HttpServletRequest request,HttpServletResponse response,String downloadType,Model model) throws Exception{
		
			try {
				FlieToPackageResponse.mainTest(request,response);
			} catch (CHException e) {
				e.printStackTrace();
				response.getWriter().print("alert('"+e.getErrInfo()+"');");
				
			} catch (Exception e) {
				e.printStackTrace();
				response.getWriter().print("alert('    ');");
				
			}
		}
package com.yangjf.service.impl;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;

public class FlieToPackageResponse {

	/**
	 *     sourceFilePath       ,   fileName   zip  ,    zipFilePath   
	 * (  excel      zip   ,      )
	 * (   excel      WritableWorkbook, wirte()  ,           ;
	 *     WorkBook,  write(io)  ,    io       excel   )。
	 * @return
	 */
	public static boolean fileToZip(Listbytes,HttpServletResponse response) {
		boolean flag = false;
		ZipOutputStream zos = null;
		ByteArrayOutputStream byteTest = new ByteArrayOutputStream(10*1024);
		try {
				zos = new ZipOutputStream(byteTest);
                if(bytes!=null&&bytes.size()>0)
                	for(int i=0;i listBytes = new ArrayList();
		byte[] b = bytes.getBytes();
		byte[] b1= bytes1.getBytes();
		byte[] b2= bytes2.getBytes();
		listBytes.add(b);
		listBytes.add(b1);
		listBytes.add(b2);
		fileToZip(listBytes,response);
		
	}

}

=====================================================================