我的系统是java+struts+jsp
我想实现对其文件的下载
目前已实现一种方式
但是出现一点问题,比如下载文件如.exe时可以跳出文件另存为窗口
但碰到如文本文件或者pdf文件时,不是跳出另存为窗口,而是直接在ie打开
现在想的是所有的文件都是通过另存为窗口
请高手帮忙
(最好是实例)
我想实现对其文件的下载
目前已实现一种方式
但是出现一点问题,比如下载文件如.exe时可以跳出文件另存为窗口
但碰到如文本文件或者pdf文件时,不是跳出另存为窗口,而是直接在ie打开
现在想的是所有的文件都是通过另存为窗口
请高手帮忙
(最好是实例)
解决方案 »
- 为什么我用的软件老是编译不出来?为什么?
- 一个画圆的颜色问题
- 一道基础性的java题目,大家看看谁的方法更好
- netbeans gui builder
- 再请教java的socket使用
- 请问java 可以调用mfc的dll吗?
- 高分求SOCKET程序框架,不够在加!请大家帮忙!
- JAVA语言所特许的浮点取模出现小问题了
- 如何设转置TextField默认焦点?如设置转移焦点的键啊,比如默认是TAB,我把它换成回车键改变焦点?
- import org.apache.tomcat.core.*; 编译通不过?
- string查找符号字符? 就是查找内容用unicode表示?
- poi生成excel设置打印纸张大小的问题
<%
//得到文件名字和路径
String filename = "test.txt";
String filepath = "F:\\";
// 设置响应头和下载保存的文件名
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition",
"attachment; filename=\"" + filename + "\"");
// 打开指定文件的流信息
java.io.FileInputStream fileInputStream =
new java.io.FileInputStream(filepath + filename);
// 写出流信息
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
%>
下面是jsp:
<%@ page contentType="text/html;charset=gb2312"
import="com.jspsmart.upload.*" %><%
String url = request.getParameter("url");
String title = request.getParameter("title");
String extName = url.substring(url.lastIndexOf("."),url.length());
title = title + extName;
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
// 设定contentDisposition为null以禁止浏览器自动打开文件,
//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,
//浏览器将用acrobat打开。
su.setContentDisposition(null);
// 下载文件
su.downloadFile(url,extName,title);
%>下载中文文件名字的时候有乱码,你可以把title加密和解密
下载的文件有中文乱码,我修改了SmartUpload类,很多,也可以贴给你如果你需要。
还请koko指教阿
我以前写过,如果需要,我可以找找代码,看看有没有了
最好是在jsp中设定编码,然后改相应的SmartUpload类,把编码改过来。
将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名。
throws ServletException, IOException, SmartUploadException
{
if(s == null)
throw new IllegalArgumentException("File '" + s + "' not found (1040).");
if(s.equals(""))
throw new IllegalArgumentException("File '" + s + "' not found (1040).");
if(!isVirtual(s) && m_denyPhysicalPath)
throw new SecurityException("Physical path is denied (1035).");
if(isVirtual(s))
s = m_application.getRealPath(s);
java.io.File file = new java.io.File(s);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
boolean flag = false;
int k = 0;
byte abyte0[] = new byte[i];
if(s1 == null)
m_response.setContentType("application/x-msdownload");
else
if(s1.length() == 0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition = m_contentDisposition != null ?
m_contentDisposition : "attachment;";
if(s2 == null)
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" +
toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" + toUtf8String(s2));
while((long)k < l)
{
int j = fileinputstream.read(abyte0, 0, i);
k += j;
m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
}
再增加这个方法: 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();
}
就可以解决下载时中文乱码的问题了