servlet实现文件下载

/**
 * @author gao_jie
 * 文件下载函数
 *
 */
public class FileDownLoadSevrlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) {
		try {
			request.setCharacterEncoding("UTF-8");// 设置编码方式使得url中的汉字能处理
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String oldTemplateName = request.getParameter("palatename");
		String fileName = null;
		String dir = null;
		File file = null;
		ITemplateManager iTemplateManager = TemplateManagerImpl.getInstance(); // 模板下载接口
		String templatename = null;
		if (oldTemplateName != null) {
			try {
				templatename = new String(oldTemplateName
						.getBytes("ISO-8859-1"), "UTF-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			String tempPath = iTemplateManager.getTemplatePath();
			// 使用接口先生成文件然后下载
			if (templatename.contains(File.separator)) {
				fileName = templatename.substring(templatename
						.lastIndexOf(File.separator) + 1);
				if (templatename.contains("templates")) {
					dir = templatename.substring(templatename
							.indexOf("templates") + 10, templatename
							.lastIndexOf(File.separator))
							+ "";
				} else {
					dir = templatename.substring(0, templatename
							.lastIndexOf(File.separator))
							+ "";
				}
			} else {
				fileName = templatename;
				dir = "";
			}
			try {
				file = iTemplateManager.downloadTemplate(fileName, tempPath
						+ File.separator + dir);
			} catch (ReportException e) {
				e.printStackTrace();
			}

			// 下载做的准备
			response.setContentType("textml;charset=UTF-8");
			response.setContentType("application/x-msdownload;charset=UTF-8");
			response.setHeader("Content-Disposition", "attachment; filename=\""
					+ fileName + "\"");
			FileReader fileReader = null;
			BufferedReader reader = null;
			BufferedWriter writer = null;
			try {
				fileReader = new FileReader(file.toString());
				reader = new BufferedReader(new FileReader(file.toString()));
				writer = new BufferedWriter(response.getWriter());
				String line = null;
				while ((line = reader.readLine()) != null) {
					writer.write(line);
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (fileReader != null)
					try {
						fileReader.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				if (reader != null)
					try {
						reader.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				if (writer != null)
					try {
						writer.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值