前后端不分离,怎么下载文件?

够劲儿 发布于 08/23 15:44
阅读 205
收藏 0

原始项目,前后端不分离。jsp当做1个特殊的class.jsp文件放在webcontent下面.

直接用<%%>编码。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
    <a href="downLoad.jsp">下载2</a>
</body>
</html>

 

downLoad.jsp

<%@ page language="java" import="PoiUtil" %>
<%@ page language="java" import="java.io.*" %>
<%@ page language="java" import="org.apache.poi.hssf.usermodel.HSSFWorkbook" %>
<%@ page language="java" import="java.util.* " %>

<%  
    File file = new File("C:\\Users\\Downloads\\test.xls");
    HSSFWorkbook workbook = PoiUtil.out(file) ;
    FileOutputStream outputStream = new FileOutputStream(file);
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
    workbook.close(); 
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:o="urn:schemas-microsoft-com🏢office"
      xmlns:x="urn:schemas-microsoft-com🏢excel"
      xmlns="http://www.w3.org/TR/REC-html40">

<head>
  
    <title>下载成功</title>
</head>

<body>
    <a href="#" onclick="window.history.go(-1)">下载成功,返回上1页</a>
</body>

</html>

 

问题:点击首页下的下载,直接跳转到downLoad.jsp界面。没有提示那种文件保存文件或下载文件的提示框。浏览器页也没有下载提示。直接就下载了。

加载中
0
够劲儿
够劲儿

也没法把文件放在服务器上。跟我以前用response的又有点不1样。

0
h
hello龙兄

应该可以在下载前先用JFileChooser弹出文件选择框,然后获取用户选择路径吧

够劲儿
够劲儿
swing的方法吗,我用的少 ,我试试。
0
博一
博一
这个写法是服务器端保存文件,要做下载功能需要用response获取输出流,而不是打开一个文件输出流
够劲儿
够劲儿
没有,你看我的代码。<%@ page language="java" import="org.apache.poi.hssf.usermodel.HSSFWorkbook" %>。直接在jsp页面引入后台文件。用java代码得到输出流。 所以没有response.jsp直接操作后台代码。
0
博一
博一
Demo:     response.setHeader("content-type", "application/octet-stream");     response.setContentType("application/octet-stream");     response.setHeader("Content-Disposition", "attachment;filename="         + URLEncoder.encode(filename, "UTF-8"));     OutputStream os = null;     try {       os = response.getOutputStream();       //读取已有文件写入,或者其他     } finally {       if (os != null) {         os.close();       }     }
够劲儿
够劲儿
也没有response,直接把jsp当成了class文件来用。
够劲儿
够劲儿
现在网上的方法主要有2个。一。保存到服务器,直接地址指向。二。response开启IO。 但是我这个是老项目,jdk1.6的。服务器不保存文件,下载的时候,jsp文件调用后台自己实现的PoiUtil的out方法,out方法是查询数据库得到list。再把list用POI生成HSSFWorkbook,方法 返回HSSFWorkbook。然后jsp直接output.所以没有request
0
博一
博一
jsp内置response,可以直接使用
够劲儿
够劲儿
好了,response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "inline; filename="+"excel.xls"); HSSFWorkbook workbook = PoiUtil.out() ; 代码改成这样就行了。
0
够劲儿
够劲儿

引用来自“博一”的评论

jsp内置response,可以直接使用

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "inline; filename="+"excel.xls");
    HSSFWorkbook workbook = PoiUtil.out() ;
    OutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
    workbook.close(); 

代码改成这样就好了。对请求头的参数还不是很熟悉。还有就是认为jsp直接<%@ page language="java" import%>后台代码没有response.

返回顶部
顶部