<%@ 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>
下载文件的jsp代码(需要得到的文件名字,要下载的ip和服务器的位置)
最新推荐文章于 2021-08-06 22:15:01 发布