当前位置: 代码迷 >> Java Web开发 >> 在jsp页面下载文件,该如何处理
  详细解决方案

在jsp页面下载文件,该如何处理

热度:176   发布时间:2016-04-16 21:57:51.0
在jsp页面下载文件
我想在jsp里面把一个已知路径的excel文件下载下来。就是在jsp里面有个按钮“下载”,点击后会弹出另存为对话框,选择路径后就可以吧这个excel文件下到指定位置,怎么实现啊。
------解决方案--------------------
后台写一个通过迭代文件夹和文件生成树的东西,选择下载的时候弹出对话框,展示这个树给他,让他选择。选择后通过选择的节点,读取相应的文件给他。这个就靠你自己去写了
------解决方案--------------------
按钮下载?
<button onclick="download();" value="下载"/>
<script type="text/javascript">
    function download() {
        window.location.href = "你的文件下载地址";
    }
</script>
好像这样子就行了吧.
------解决方案--------------------
等待高手解决问题 我也遇到了同样的问题!
------解决方案--------------------
<a href="你的文件路径">下载</a> 这样就行
------解决方案--------------------
引用:
这个文件地址要怎么写呢,如果从客户端下载服务器上面的文件,这个地址就不行了吧?


写个servlet或者action之类的类, 前台点击下载按钮访问服务器这个类, 类里面通过File file = new File(文件的绝对路径);生成一个file对象, 然后通过FileInputStream fis = new FileInputStream(fiile);生成输入流.然后通过response的getOutputStream()对象将输入流返回给客户. 在返回前需要设置一下返回的头什么的.
//设置返回值类型, excel文件类型
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Pragma", "public");
response.addHeader("Content-Disposition", "attachment;filename=\"" + new String(file.getFileName().getBytes("UTF8"), "iso-8859-1")+"\"");
我项目里面用的是utf8编码. 所以编码部分你可以修改为你所用的编码格式.
注意responsesetCntentType这几行代码要放在response.getOutputStream()代码之前调用. 否则会报错或者无效果.

------解决方案--------------------
引用:
按钮下载?
<button onclick="download();" value="下载"/>
<script type="text/javascript">
  function download() {
  window.location.href = "你的文件下载地址";
  }
</script>
好像这样子就行了吧.
像这种下载,文件名不能是中文,并且必须放在项目下面,
你也可以在servlet中用流的形式返回文件,这样的话可以下中文名的文件,也不用放在项目下
------解决方案--------------------
//servlet代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileDown extends HttpServlet {
public FileDown() {
super();
}

public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletExceptionIOException {

this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.addHeader("Content-Disposition", "attachment;filename="
+ new String("送.txt".getBytes("GBK"),"ISO8859_1"));
response.setContentType("text/html");
PrintWriter out = response.getWriter();
FileInputStream in = null;
File f = new File("C:\\送.txt");

try {
in = new FileInputStream(f);
byte b[] = new byte[1024];
while (in.read(b, 0, 1024) != -1) {
out.write(new String(b, "ISO8859_1"));
}
in.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

out.flush();
out.close();
}

public void init() throws ServletException {

}

}

------解决方案--------------------
//web.xml
<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>FileDown</servlet-name>
    <servlet-class>FileDown</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>FileDown</servlet-name>
    <url-pattern>/servlet/FileDown</url-pattern>
  </servlet-mapping>
------解决方案--------------------
你可以Google一下FileUpload相关的文章,网上都有很详细的解答的。
------解决方案--------------------
个人认为超链接不可靠
现在的情况是只要能拿到文件的路径,即便是从客户端下载服务器上的文件,
只要文件存在,就能下载,数据库一般都会存在文件上传的地址的,你只需要拿到就行了
拿到文件地址,直接把文件地址传到jsp页面,jsp页面如下

<body>
    <%
    String path="";
    if(request.getAttribute("filedownPath")!=null){
  相关解决方案