2017-03-10 109 views
-1

这是在浏览器上下载excel文件的代码,但是当我打开它时excel抛出一个错误“Excel无法打开文件Location.xlsx”,因为文件格式或文件扩展名验证文件没有被破坏,并且文件的扩展名与文件的格式相匹配“但是当我简单地创建这个文件时,它的打开只有当我执行下载操作时出现这个错误,并且我正在使用poi jar for excel文件创建...?excel无法打开通过jsp下载的文件

<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

而是在JSP这样做的去做具备Servlet,JSP使用字符作家动态生成HTML而不是将损坏的Excel文件的二进制输出流http://stackoverflow.com/questions/11226603/create -an-excel-file-for-users-to-download-using-apache-poi –

+0

[为用户创建一个excel文件使用Apache POI下载]可能的重复(http://stackoverflow.com/questions/11226603/创建一个excel文件为用户下载使用apache poi) –

回答

0

请先将文件下载到编码的Servlet(不JSP文件中做)..

检查这个代码将会帮助..这是与我一起为同样的目的为u要求。

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(); 
     } 
    } 


} 
+0

这是JSP文件的编码..它调用上面的servlet。 \t \t \t \t \t <! - 对于.pdf文件下载 - > \t \t \t \t <! - 对于.xlsx文件下载 - > myounism

相关问题