用jquery ajax实现 文件下载功能。是不是要使用插件才行啊。

时间:2022-08-31 16:34:18
我用超链接做下载的可以,用ajax触发就不行,弹不出下载的对话框啊。用alert(回传的数据),可以看到要下载的文件的内容都写到里面去了,怎么回事啊。
后台代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

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


public class DownloadServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("UTF-8");
        java.io.BufferedInputStream bis = null;
        java.io.BufferedOutputStream bos = null;

        String ctxPath = request.getSession().getServletContext().getRealPath("/");
        System.out.println(ctxPath);
        String downLoadPath = "c:/checkoute8cdata/test220.csv";
        System.out.println(downLoadPath);
        try {
            long fileLength = new File(downLoadPath).length();
            response.setContentType("application/x-msdownload;");
            response.setHeader("Content-disposition", "attachment; filename="
                    + new String("test".getBytes("utf-8"), "ISO8859-1"));
            response.setHeader("Content-Length", String.valueOf(fileLength));
            bis = new BufferedInputStream(new FileInputStream(downLoadPath));
            bos = new BufferedOutputStream(response.getOutputStream());
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
           
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
}
}

前台代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Panel</title>
<script type="text/javascript" src="scripts/jquery-1.4.4.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
   document.getElementById("panel").onclick=function(){
   $.ajax({
        type: "get",
        url: "DownloadServlet"
       
    });
  }
  })
</script>
</head>
<body>
<div id="panel">download</div>

<%--<a href="DownloadServlet">download</a>
--%></body>
</html>

8 个解决方案

#1


数据返回了,你怎么处理的。

#2


既然用jquery 为什么要document.getElementById("panel").onclick=
改成 $("#panel").click(function(){});
firebug 测试下..

#3


数据我没有处理,我只是要实现下载的功能,而ajax返回的数据给我输到浏览器了,而不是弹出下载对话框

#4


引用 1 楼 acesidonu 的回复:
数据返回了,你怎么处理的。

数据我没有处理,我只是要实现下载的功能,而ajax返回的数据给我输到浏览器了,而不是弹出下载对话框

#5


引用 2 楼 xdq_0518 的回复:
既然用jquery 为什么要document.getElementById("panel").onclick=
改成 $("#panel").click(function(){});
firebug 测试下..

问题不能解决

#6


post 呢

#7


引用 6 楼 syxfqw7 的回复:
post 呢

post也不行啊。

#8


引用 7 楼 inrtyx 的回复:
引用 6 楼 syxfqw7 的回复:
post 呢

post也不行啊。

要 用个架包的 而且request 也不是HttpServletRequest了,要一个文件上传,下载的架包就好了

#1


数据返回了,你怎么处理的。

#2


既然用jquery 为什么要document.getElementById("panel").onclick=
改成 $("#panel").click(function(){});
firebug 测试下..

#3


数据我没有处理,我只是要实现下载的功能,而ajax返回的数据给我输到浏览器了,而不是弹出下载对话框

#4


引用 1 楼 acesidonu 的回复:
数据返回了,你怎么处理的。

数据我没有处理,我只是要实现下载的功能,而ajax返回的数据给我输到浏览器了,而不是弹出下载对话框

#5


引用 2 楼 xdq_0518 的回复:
既然用jquery 为什么要document.getElementById("panel").onclick=
改成 $("#panel").click(function(){});
firebug 测试下..

问题不能解决

#6


post 呢

#7


引用 6 楼 syxfqw7 的回复:
post 呢

post也不行啊。

#8


引用 7 楼 inrtyx 的回复:
引用 6 楼 syxfqw7 的回复:
post 呢

post也不行啊。

要 用个架包的 而且request 也不是HttpServletRequest了,要一个文件上传,下载的架包就好了