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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章