我用<a href="${attachment}">[下载...]</a>下载一个服务器上的视频文件时候,我想弹出一个下载提示框,让用户选择打开或者保存。但是当${attachment}为服务器上一个视频文件时候,IE浏览器直接在页面打开,全是乱码文本。火狐则没这种问题。
http://xxx.xx.xxx.xx/2012/M00/00/00/rBMgLk685XS1ATn0AZB7ihkV57Q142.wmv是${attachment}值。而http://xxx.xx.xxx.xx/123.MP3的${attachment}值却没问题。我在网上看了一些说是IE的response.Header长度最多150字节,也有的说要response.setHeader("Content-Disposition", "attachment;filename=" + file);各种说法。求指教.怎么直接<a href="${attachment}">[下载...]</a>下载,不用流写。

解决方案 »

  1.   

    好像不行,这样下载下来的都是文本吧??你可以在href后面加上一个跳转到一个servlet上,使用response.setHeader("Content-Disposition", "attachment;filename=" + file)
      

  2.   

    这个很是容易的,给你一个实例你测试一下,我成功过的:
    index.jsp 
    下载链接:<a href='download.jsp?filename=text.txt'>点我下载</a>
    download.jsp 代码:<%
    request.setCharacterEncoding("utf-8");
    String filename = (String) request.getParameter("filename");
    filename = new String(filename.getBytes("ISO-8859-1"), "UTF-8"); 
    out.println(filename);
    // 得到文件的当前路径 
    String   serverpath = request.getRealPath("\\IOTest\\download\\"); 
    out.println("serverpath = " + serverpath);
    out.println("file = " + serverpath+"\\"+filename);
    File fileLoad = new File(serverpath+filename);
    response.setContentType("application/octet-stream");
    response.setHeader("content-disposition","attachment; filename="+filename);
    long fileLength = fileLoad.length();
    String length1 = String.valueOf(fileLength);
    response.setHeader("Content_Length",length1);
    try {
    FileInputStream in = new FileInputStream(fileLoad);
    OutputStream o = response.getOutputStream();
    int n;
    byte b[] = new byte[500];
    while((n=in.read(b))!=-1){
       o.write(b,0,n);
    } in.close();
     
    } catch (IOException e) {
    out.println("Jsp IOException:" + e.getMessage());// e.printStackTrace();
    }

    out.clear();
    out = pageContext.pushBody();
    %>
      

  3.   

    谢谢,我不想走servlet,有没有办法直接用<a href="文件地址">下载的?
      

  4.   

    谢谢,我不想走流,这个我也成功过,我想问问有没有<a href="文件地址"弹出下载框不打开的?