henushang
孤独人生
2013-07-07 20:45
浏览 387
已采纳

spring mvc 文件下载怎么不成功呢?

在firebug下面我可以看到后台的2.9M的数据已经传到了前台,可是就是没有显示保存文件那样的对话框出来,真心不知道怎么回事了。。。。

 

下面是我网前台返回数据流的代码,希望大家能够帮个忙看看究竟怎么回事。。。

 

  @RequestMapping("downLoadSelect")
    public void downloadSelect(int[] ids, HttpServletResponse response, HttpServletRequest request){
        
            File zipFile = null;
            try {
                zipFile = tupianxxService.downLoad(request,response, ids);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            response.reset();
            response.setCharacterEncoding("utf-8");
            response.setContentType("APPLICATION/OCTET-STREAM"); 
            response.setHeader("Content-Disposition", "attachment;fileName=abc.zip");
            try {
                InputStream ins=new FileInputStream(zipFile);
                OutputStream bout = new BufferedOutputStream(response.getOutputStream());
                byte[] b=new byte[1024];
                int length;
                while((length=ins.read(b))>0){
                    bout.write(b,0,length);
                }
                bout.flush();
                bout.close();
                ins.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • jinnianshilongnian
    jinnianshilongnian 2013-07-08 06:57
    已采纳
    点赞 评论
  • tangduDream
    tangduDream 2013-07-07 23:01

    前台window.location.href跳转就好了噻

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-disposition", "attachment"
    + "; filename=" + fileName);

    没试过,不知道 大小写是否区分 。。自己 测试去吧。

    点赞 评论
  • yongskyq
    yongskyq 2013-07-08 00:16

    不清楚是什么问题,不过你可以这样试下:
    1、加上:
    response.addHeader("Content-Length", "" + zipFile.length());

    2、修改:
    response.setHeader("Content-Disposition", "attachment;fileName=abc.zip");

    为:
    response.addHeader("Content-Disposition", "attachment;fileName=abc.zip");

    3、改代码顺序,这个清楚是否一定行
    bout.flush();

    bout.close();

    ins.close();

    把ins.close()放到前面,如果还不行可以试下去掉bout.flush()。

    点赞 评论
  • mafangling
    mafangling 2013-07-09 09:24

    建议用这个试试
    window.location.href=<%=contextPath%>+ 'zsch/tupianxx/downLoadSelect?ids='+ids
    下载好像不能用AJAX

    点赞 评论

相关推荐