Java excel无法通过jsp打开下载的文件
这是在浏览器上下载excel文件的代码,但当我打开它时,excel会抛出一个错误“excel无法打开文件'Location.xlsx',因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配”但是当我简单地创建这个文件时,当我执行下载操作并且使用poi jar创建excel文件时,只会出现这个错误Java excel无法通过jsp打开下载的文件,java,excel,jsp,apache-poi,database-connection,Java,Excel,Jsp,Apache Poi,Database Connection,这是在浏览器上下载excel文件的代码,但当我打开它时,excel会抛出一个错误“excel无法打开文件'Location.xlsx',因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配”但是当我简单地创建这个文件时,当我执行下载操作并且使用poi jar创建excel文件时,只会出现这个错误 <html> <body> <% LocationDownload.downloadLocation();
<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>
首先将文件下载编码移动到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();
}
}
}
JSP使用字符编写器动态生成HTML,而不是二进制输出流,这将损坏excel文件可能与JSP文件的编码重复。。它调用上面的servlet。