import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream; public class DownFile { /** * filename 下载到客户端后的文件名称 * filepath 文件的路径 绝对路径和相对路径都可以 *下载 文件 */ public static void downZip(String filename,String filepath,HttpServletResponse response) { FileInputStream inStream=null; try { File zip=new File(filepath);// 文件 inStream=new FileInputStream(zip); byte[] buf=new byte[4096]; int readLength; setResponseHeader(response, filename); while (((readLength=inStream.read(buf)) != -1)) { response.getOutputStream().write(buf, 0, readLength); } }catch (Exception e){ try { OutputStream outputStream=response.getOutputStream();//获取OutputStream输出流 response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示 byte[] dataByteArr="下载失败".getBytes("UTF-8");//将字符转换成字节数组,指定以UTF-8编码进行转换 outputStream.write(dataByteArr);//使用OutputStream流向客户端输出字节数组 return; }catch (Exception ex){ } }finally { try { inStream.close(); } catch (Exception e) { } } } /** * 设置响应头 文件类型为zip的 可以修改对应的后缀 */ public static void setResponseHeader(HttpServletResponse response, String fileName) { try { response.reset();// 清空输出流 response.setContentType("application/octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("GB2312"), "8859_1") + ".zip"); response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); } catch (Exception ex) { ex.printStackTrace(); } } }

示例中的文件格式为zip的,在setHeader中设置文件名字时可以修改,设置的文件名字与实际要下载的文件名字要一样

相关文章