excel无法通过jsp

时间:2017-03-10 11:47:44

标签: java excel jsp apache-poi database-connection

这是在浏览器上下载excel文件的代码,但是当我打开它时,Excel会抛出错误" Excel无法打开文件' Location.xlsx'因为文件格式或文件扩展名无效。验证文件是否已损坏,文件扩展名是否与文件格式相符"但是当我只是创建这个文件时它只是当我执行下载操作并且我使用poi jar来创建excel文件时才会出现这个错误... ???

<html>

    <body>
        <%
   LocationDownload.downloadLocation();
%>
<% 
  String filename = "Location.xlsx";   
  String filepath = "C:\\Users\\dsingh\\GlassFish_Server\\glassfish\\domains\\domain1\\config\\";   
  response.setContentType("application/vnd.ms-excel");   
  response.setHeader("Content-Disposition","attachment; filename=" + filename);   

  java.io.FileInputStream fileInputStream=new java.io.FileInputStream(filepath + filename);  

  int i;   
  while ((i=fileInputStream.read()) != -1) {  
    out.write(i);   
   }   
  fileInputStream.close();   
%>   

    </body>
</html>

1 个答案:

答案 0 :(得分:0)

首先将文件下载编码移动到Servlet(不要在JSP文件中执行)..

检查此代码会有所帮助..它与我合作的目的与您要求的相同。

package edu.zukrah.servlets;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FileDownload
 */
@WebServlet("/FileDownload")
public class FileDownload extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         File f = new File ("E:/pdftest/" + request.getParameter("file") );
         //set the content type(can be excel/word/powerpoint etc..)

         String type = request.getParameter("type");
         response.setContentType (type);

         //set the header and also the Name by which user will be prompted to save
         response.setHeader ("Content-Disposition", "attachment; filename=\""+request.getParameter("file")+"\"");

         //get the file name
         String name = f.getName().substring(f.getName().lastIndexOf("/") + 1, f.getName().length());

         //OPen an input stream to the file and post the file contents thru the 
         //servlet output stream to the client m/c
          InputStream in = new FileInputStream(f);

        try{
              ServletOutputStream outs = response.getOutputStream();

              int bytesRead;
              byte[] buf = new byte[4 * 1024]; // 4K buffer

              try {
                   while ((bytesRead = in.read(buf)) != -1){ 
                       outs.write(buf, 0, bytesRead);
                   }

              } catch (IOException ioe) {
                  ioe.printStackTrace(System.out);
              }

              System.out.printf(name + ",  %.2f kbs downloaded, %.2f mbs downloaded   \n", 
                                (f.length()/((double)(1024))), 
                                (f.length()/((double)(1024*1024))));

              outs.flush();
              outs.close();
              in.close(); 
        }catch(Exception e){
            e.printStackTrace();
        }
    }


}