下载文件的jsp代码(需要得到的文件名字,要下载的ip和服务器的位置)

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.File"%>
<%@ page import="java.io.*"%>
<%@ page import="java.net.*"%>
<%@ page import="java.util.*"%>

<html>
<head>
<title>文档下载保存中转页面</title>
</head>
<!--
  *文件名:down_center.jsp
  *实现功能:服务器上保存的文件名为按上传时间命名的
                下载时自动替换为中文文件名
-->
<body>

<%!
public String toUtf8String(String s) {///源于网上
    StringBuffer sb = new StringBuffer();
    for (int i=0;i<s.length();i++)
    {
        char c = s.charAt(i);
        if (c >= 0 && c <= 255)
        {
            sb.append(c);
        }
        else
        {
            byte[] b;
            try {
                b = Character.toString(c).getBytes("utf-8");
            }
            catch (Exception ex)
            {
                System.out.println(ex);
                b = new byte[0];
            }
            for (int j = 0; j < b.length; j++)
            {
                int k = b[j];
                if (k < 0) k += 256;
                sb.append("%" + Integer.toHexString(k).
                toUpperCase());
            }
    }
}
return sb.toString();
}
//
public static String toChinese(String strvalue)
{
         try{
             if(strvalue==null)
                return null;
             else
             {
                strvalue = new String(strvalue.getBytes("GBK"), "ISO8859_1");
                return strvalue;
         }
         }catch(Exception e){
               return null;
         }
}
%>

<%
    File fileName;
    request.setCharacterEncoding("GBK");

    String filename=request.getParameter("filename");
    String dirName=application.getRealPath("/report");
   
    System.out.println("工作目录:"+dirName);
    if (filename ==null){
        out.print("<a href='javascript:history.back();'>该文件不存在!</a>");
        return;
    }
    String [] fileStr = filename.split("/");
    String http       =  fileStr[0];
    String Ip           =  fileStr[1]+fileStr[2];
    String Web2       =  fileStr[3];
    String report       =  fileStr[4];
    String filexls      =  fileStr[5];
   
    System.out.println("得到服务器绝对路径0:"+http);
    System.out.println("得到服务器绝对路径1:"+Ip);
    System.out.println("得到服务器绝对路径2:"+Web2);
    System.out.println("得到服务器绝对路径3:"+report);
    System.out.println("得到服务器绝对路径4:"+filexls);
   
    fileName = new File(dirName,filexls);
     if(!fileName.exists()){//删除File2文档
         out.print("<a href='javascript:history.back();'>该文件不存在!</a>");
         return;         
     }   
   
    java.io.File ff=null;
    String dd=dirName+System.getProperties().getProperty("file.separator")+filexls;

    try{
        ff=new java.io.File(dd);
    }
    catch(Exception e){
    e.printStackTrace();
    }
    if (ff!=null&&ff.exists()&&ff.isFile())
    {
    long filelength = ff.length();
    InputStream inStream=new FileInputStream(dd);
    //设置输出的格式
    response.reset();
    response.setContentType("application/x-msdownload");
    response.setContentLength((int)filelength);
    response.addHeader("Content-Disposition","attachment; filename=\"" + toChinese(filexls) + "\"");
    //循环取出流中的数据
    byte[] b = new byte[100];
    int len;
    while((len=inStream.read(b)) >0)
    response.getOutputStream().write(b,0,len);
    response.flushBuffer();
    response.getOutputStream().close();
    inStream.close();
    //在tomcat中jsp编译成servlet之后在函数
    //jspService(HttpServletRequest request, HttpServletResponse response)的最后有一段这样的代码
    //finally {
    //        if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    //}
    //这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和
    //response.getOutputStream()相冲突的!所以会出现以上这个异常。然后当然是要提出解决的办法,
    //其实挺简单的(并不是和某些朋友说的那样
    //将jsp内的所有空格和回车符号所有都删除掉),在使用完输出流以后调用以下两行代码即可:
     out.clear();
    out = pageContext.pushBody();
    }
%>

</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值