package com.nfwork.dbfound.web.file; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URLEncoder; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import com.nfwork.dbfound.exception.ParamNotFoundException; import com.nfwork.dbfound.model.bean.Param; import com.nfwork.dbfound.util.LogUtil; import com.nfwork.dbfound.web.WebWriter; public class FileDownloadUtil { public static void download(Param p, Map<String, Param> params, HttpServletResponse response) { String nameParamName = p.getFileNameParam(); if (nameParamName == null) { nameParamName = p.getName() + "_name"; } Param nameParam = params.get(nameParamName); if (nameParam == null) { throw new ParamNotFoundException("nameParam: " + nameParamName + " 没有定义"); } String filename = nameParam.getStringValue(); if (filename == null || "".equals(filename)) { filename = "download.data"; } if (p.getValue() == null) { WebWriter.jsonWriter(response, "<font color='#e51212'>系统未找到下载文件路径!<a href='JavaScript:history.back();'>返回</a>"); return; } File file = null; Object object = p.getValue(); if (object instanceof File) { file = (File)object; }else { file = new File(FileUtil.getDownLoadFolder(p.getStringValue())); } if (file.exists()) { try { filename = URLEncoder.encode(filename, "utf-8"); response.setContentType("application/x-download;"); response.setHeader("Content-Disposition", "attachment;filename=" + filename); ServletOutputStream sout = response.getOutputStream(); // 图片输出的输出流 InputStream in = new FileInputStream(file); try { if (in != null) { byte b[] = new byte[2048]; int i = in.read(b); while (i != -1) { sout.write(b, 0, i); i = in.read(b); } } } finally { if (in != null) { in.close(); } if (sout != null) { sout.flush(); // 输入完毕,清除缓冲 sout.close(); } } } catch (Exception e) { LogUtil.error(e.getMessage(), e); } finally { if ("db".equals(p.getFileSaveType()) && p.getStringValue().endsWith(".dbf")) { file.delete(); } } } else { WebWriter.jsonWriter(response, "文件:<font color='#e51212'>" + filename + "</font>,不存在! " + " <a href='JavaScript:history.back();'>返回</a>"); LogUtil.warn("文件:" + file.getAbsolutePath() + ",不存在"); } } }