public static String getStr(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();
}
%>
<%
String filename = "";
if (request.getParameter("filename") != null) {
filename = request.getParameter("filename");
}
response.reset(); //这行很重要!!!!!!!!
request.setCharacterEncoding("gb2312");
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\"" + getStr(filename) + "\"");
// 打开指定文件的流信息
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(getServletContext().getRealPath("" + filename));
// 写出流信息
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
%>
以上这段代码我是在楼上提供的网址下的,但是我在JRUN下无法编译。
出现如下错误:
jrunx.compiler.DefaultCFE: Compiler errors:
Found 2 semantic errors compiling "C:/appserver/BSMHttp/default-ear/default-war/WEB-INF/jsp/jrun__mydownload2ejspf.java":
64. java.io.FileInputStream fileInputStream = new java.io.FileInputStream(getServletContext().getRealPath("" + filename));
<----------------->
*** Error: No method named "getServletContext" was found in type "jrun__mydownload2ejspf". However, there is an accessible method "getServletConfig" whose name closely matches the name "getServletContext".
106. b = Character.toString(c).getBytes("utf-8");
<------------------->
*** Error: No match was found for method "toString(char)".