Excel在JAVA servlet中下载错误文件不匹配

/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("Hi inside download file :"); response.setContentType("application/vnd.ms-excel"); PrintWriter out = response.getWriter(); String filename = "ResetPassword.xlsx"; InputStream is = null; //is = this.getClass().getClassLoader().getResourceAsStream("LoginConfigurations.xlsx"); //System.out.println("InputStream :"+is); String filepath = "E:\\SPACE_OM_01.02\\SPACE-OM_1.0-V01.02\\WebContent\\Data\\"; response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); // use inline if you want to view the content in browser, helpful for // pdf file response.setHeader("Content-Disposition","inline; filename=\"" +filename + "\""); FileInputStream fileInputStream = new FileInputStream(filepath+ filename); /*BufferedReader br = new BufferedReader(new InputStreamReader(is)); int line; System.out.println("Buffer Reader length :"+br.read()); StringBuilder sb = new StringBuilder(); while ((line = br.read()) != -1) { //sb.append(line); out.write(line); } br.close();*/ int line; System.out.println("Buffer Reader length :"+fileInputStream.read()); //StringBuilder sb = new StringBuilder(); while ((line = fileInputStream.read()) != -1) { //sb.append(line); out.write(line); } fileInputStream.close(); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } 

我试图下载excel文件的扩展名为.xlsx使用button点击后下载button文件正在下载时,当我试图打开该下载文件,其错误如Excel文件无法打开,因为文件格式或文件扩展名无效。 请帮我解决这个问题。 提前致谢。

replace这一行:

 PrintWriter out = response.getWriter(); 

用这一行:

 OutputStream out = response.getOutputStream(); 

您正在从InputStream中读取一个字节,您应该再次向OutputStream写入一个字节以复制该字节。 现在你的字节被作为一个字符发送给PrintWriter,这是错误的。

并删除这一行:

 System.out.println("Buffer Reader length :"+fileInputStream.read()); 

这行读取文件的第一个字节并将其丢弃,结果下载的文件丢失了第一个字节。