JSF1.2上傳下載

package com.chis.web.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URLEncoder;
import java.util.Map;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chis.web.reportBean.JasperPrintBean;


import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperRunManager;


public class DownLoadUtil {

	public static String uploadFile2Database(FileInputStream fis)
			throws IOException {
		StringWriter sw = new StringWriter();
		int len = 1;
		byte[] temp = new byte[len];

		/* 16進制轉化模塊 */
		for (; (fis.read(temp, 0, len)) != -1;) {
			if (temp[0] > 0xf && temp[0] <= 0xff) {
				sw.write(Integer.toHexString(temp[0]));
			} else if (temp[0] >= 0x0 && temp[0] <= 0xf) {// 對於只有1位的16進制數前邊補“0”
				sw.write("0" + Integer.toHexString(temp[0]));
			} else { // 對於int<0的位轉化爲16進制的特殊處理,因爲Java沒有Unsigned
				// int,所以這個int可能爲負數
				sw.write(Integer.toHexString(temp[0]).substring(6));
			}
		}
		return sw.toString();
	}

	public static void writeNew2Binary(ServletOutputStream sos, String replaced)
			throws NumberFormatException, IOException {
		for (int i = 0; i < replaced.length(); i = i + 2) {
			sos.write(Integer.parseInt(replaced.substring(i, i + 2), 16));
		}
	}

	/**
	 * 文件下載
	 */
	public static void downFile(String fileName, String fileContent) {
		try {
			HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
					.getCurrentInstance().getExternalContext().getResponse();
			// 從頁面下載的流
			ServletOutputStream servletOutputStream = httpServletResponse
					.getOutputStream();
			writeNew2Binary(servletOutputStream, fileContent);
			// 文件名編碼轉換
			httpServletResponse.setHeader("Content-disposition","attachment; filename="+ URLEncoder.encode(fileName, "UTF-8"));
			httpServletResponse.setContentLength((int) fileContent.length() / 2);
			httpServletResponse.setContentType("application/x-download");
			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		FacesContext.getCurrentInstance().responseComplete();
	}

	/**
	 * 框架內嵌入報表打印
	 * @param tjb
	 */
	public static void printPdf1(JasperPrintBean tjb) {
		HttpServletResponse response = (HttpServletResponse) FacesContext
				.getCurrentInstance().getExternalContext().getResponse();

		HttpServletRequest request = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();

		ServletContext servletContext = request.getSession()
				.getServletContext();

		File reportFile = new File(servletContext
				.getRealPath(tjb.getFileName()));
		String myname = new String("裴賀先");

		Map<String, Object> parameters = tjb.getParam();
		parameters.put("Name", myname);
		JRDataSource ds = tjb.getDs();
		try {
			byte[] bytes = JasperRunManager.runReportToPdf(
					reportFile.getPath(), parameters, ds);
			response.setContentType("application/pdf");
			response.setContentLength(bytes.length);
			ServletOutputStream ouputStream = response.getOutputStream();
			ouputStream.write(bytes, 0, bytes.length);
			ouputStream.flush();
			ouputStream.close();
		} catch (Exception e) {
			System.out.println("打印報表失敗:" + e.getMessage());
		}
		FacesContext.getCurrentInstance().responseComplete();
	}
}



發佈了28 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章