j2ee,jsp,servlet文件下载服务器端
来源:互联网 发布:mac定妆喷雾 编辑:程序博客网 时间:2024/06/06 07:34
1.getOutputStream() has already been called for this response
报错的原因:
使用tomcat容器调用response.getOutputStream()方法的时候只能够写二进制文件.
但调用requonse.getWriter()方法时,则只能够在前台打印文本文件.
所以:
如果在jsp页面:
outPutStream.flush();outPutStream.close();outPutStream=null;response.flushBuffer();out.clear();out = pageContext.pushBody();这里out和pageContext是jsp的内置对象;
如果在后台:
如果使用response.getWrter,那么前面只能用response.setContentType("text/html");
如果想用二进制流的方式输出,那么就不都够使用response.setContentType("text/html");
如果是想传输文件,推荐:
response.setContentType("application/x-msdownload;charset=utf-8");
同时为了防止乱码,response.setCharacterEncoding("utf-8");
filename = URLEncoder.encode(filename, "utf-8");
文件下载的代码:
public void getDownLoadBook() throws IOException{response.setCharacterEncoding("utf-8");String filepath=request.getSession().getServletContext().getRealPath("\\") + "upload\\books\\";//通过前台bookId,从数据库中取出文件保存的信息Book book=this.getBookService().getBook(bookId);if(book==null){ response.setContentType("text/html");PrintWriter writer=response.getWriter();writer.write("<html><body>");writer.write("此电子书不存在!");writer.write("</body></html>");writer.flush();writer.close();return;}String filename=book.getSaveName()+"";java.io.File file = new java.io.File(filepath + filename);if (!file.exists()) { response.setContentType("text/html"); PrintWriter writer=response.getWriter(); writer.write("<html><body>"); writer.write("文件不存在!<br/>"+file.getAbsolutePath()+book.getOriginalName()+"不见了!"); writer.write("</body></html>"); writer.flush(); writer.close(); return;}response.setContentType("application/x-msdownload;charset=utf-8");response.setCharacterEncoding("utf-8");response.setContentLength((int) file.length());filename=book.getOriginalName();//编码文件名,防止乱码filename = URLEncoder.encode(filename, "utf-8");response.setHeader("Content-Disposition", "attachment; filename=" +filename);//得到输出流 javax.servlet.ServletOutputStream out = response.getOutputStream();// 读取文件流java.io.FileInputStream fileInputStream = new java.io.FileInputStream(file);// 下载文件, 设置响应头和下载保存的文件名filename=book.getOriginalName();if (filename != null && filename.length() > 0) {if (fileInputStream != null) {int filelen = fileInputStream.available();文件太大时内存不能一次读出,要循环int i=4096; do{ byte a[] = new byte[4096]; i=fileInputStream.read(a); out.write(a, 0, i); }while(i>=4096);}fileInputStream.close();out.flush();out.close();} }
0 0
- j2ee,jsp,servlet文件下载服务器端
- jsp servlet文件下载
- jsp/servlet下载文件
- jsp+servlet文件下载
- 简单文件下载,servlet+jsp
- J2EE、EJB、SERVLET、JSP
- J2EE(JSP+Servlet)
- 【J2EE】JDBC+JSP+Servlet
- Jsp/Servlet:实现文件上传与下载
- jsp+servlet实现文件上传与下载
- Jsp/Servlet:实现文件上传与下载
- Jsp/Servlet:实现文件上传与下载
- Java 下载文件回顾(servlet+jsp)
- Jsp/Servlet:实现文件上传与下载
- JSP/Servlet文件上传与下载
- Jsp/Servlet:实现文件上传与下载
- 文件上传和下载(一)--【jsp+servlet】
- jsp servlet通知客户端下载文件
- Oracle 并发更新大表
- ios 开发视频教程
- javescript循环(for…in…/Map和Set/函数/apply()与call()/map()/reduce()/filter()/sort())
- C#字节和字符的转换,以及校验和计算
- jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
- j2ee,jsp,servlet文件下载服务器端
- Servlet 3.0 新特性概览
- FLex 4.0 Module里面Alert.show();出错问题
- Android初级教程_获取Android控件的宽和高
- CSS3下实现边框阴影效果(下)-翘边阴影效果
- Android初体验之Monkey和MonkeyRunner
- swift实作app 交流分享八(self sizing cells)
- 算法练习:排列组合之子集合
- javascript 的对象(Object)