要写转换函数\
<%@ include file="../share/setup.jsp" %>
<%@ page import = "com.guomao.util.*"%>
<%!
public static 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();
}
%>
<% // 得到文件名字和路径
String filename = CTools.dbToWeb(request.getParameter("filename"));
String path=CTools.dbToWeb(CTools.transfer(request.getParameter("path")));
String filepath ="../" + BASEDIR + path+"/";
// 设置响应头和下载保存的文件名
String CONTENT_TYPE = "text/html; charset=GBK";
response.setContentType(CONTENT_TYPE);
response.setContentType("APPLICATION/OCTET-STREAM");
//System.out.println(filename+filepath);
response.setHeader("Content-Disposition","attachment; filename=\"" + toUtf8String(filename) + "\""); // 打开指定文件的流信息
java.io.FileInputStream fileInputStream =
new java.io.FileInputStream( filepath + filename); // 写出流信息
int i;
while ((i=fileInputStream.read()) != -1) {
response.getOutputStream().write(i);
}
fileInputStream.close();
response.getOutputStream().close();
%>
<%@ include file="../share/setup.jsp" %>
<%@ page import = "com.guomao.util.*"%>
<%!
public static 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();
}
%>
<% // 得到文件名字和路径
String filename = CTools.dbToWeb(request.getParameter("filename"));
String path=CTools.dbToWeb(CTools.transfer(request.getParameter("path")));
String filepath ="../" + BASEDIR + path+"/";
// 设置响应头和下载保存的文件名
String CONTENT_TYPE = "text/html; charset=GBK";
response.setContentType(CONTENT_TYPE);
response.setContentType("APPLICATION/OCTET-STREAM");
//System.out.println(filename+filepath);
response.setHeader("Content-Disposition","attachment; filename=\"" + toUtf8String(filename) + "\""); // 打开指定文件的流信息
java.io.FileInputStream fileInputStream =
new java.io.FileInputStream( filepath + filename); // 写出流信息
int i;
while ((i=fileInputStream.read()) != -1) {
response.getOutputStream().write(i);
}
fileInputStream.close();
response.getOutputStream().close();
%>
不过我确定不是中文文件名的问题,我用中文名的word文档也试过了的,可以打开,没有任何问题。
文件流的方法我也试过,结果是一样的。
我在网上查过资料,用我的方法是可以打开PPT的,不知道是不是我的IE设置不对。
<mime-mapping>
<extension>ppt</extension>
<mime-type>application/mspowerpoint</mime-type>
</mime-mapping>