struts文件下载问题

我用一个文件名做为一个超链接,点击文件名时跳到一个下载的Action中,我想要的效果是当点击文件名时弹出来一个窗口问是打开还是保存,点击打开时就新打开一个和文件类型一样的... 我用一个文件名做为一个超链接,点击文件名时跳到一个下载的Action中,我想要的效果是当点击文件名时弹出来一个窗口问是打开还是保存,点击打开时就新打开一个和文件类型一样的文件,是WORD就用WORD打开的那种,如果是保存就可以选择保存路径的那种,不知道我说明说明白,但是很多网站现在都用的。但是我的一点打开时就直接在IE中打开了?
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
CfileDAO dao = new CfileDAO();
Cfile f = (Cfile) dao.findById(Integer.parseInt(id));
String strFileName = f.getCname();// 得到文件名
// String root = servlet.getServletContext().getRealPath("/" + "UpFile");// 得到存放文件目录
String root="D:/space/ccu_eduinter/WebRoot/UpFile";
File file = new File(root + "/" + strFileName);
System.out.println("file==========" + file);
if (file.exists()) {
try {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
byte[] buffer = new byte[1024];

response.reset();
request.setCharacterEncoding("gb2312");

response.setContentType(getContentType(strFileName));// 不同类型的文件对应不同的MIME类型
response.setHeader("Content-disposition",
"attachment; filename="
+ URLEncoder.encode(strFileName, "gb2312"));
OutputStream os = response.getOutputStream();
while (bis.read(buffer) > 0) {
os.write(buffer);
}
bis.close();
os.close();
} catch (Exception e) {
System.out.println("下载文件时出错!");
}
} else {
System.out.println("文件不存在!");
}
return null;

}
还有我下载后的后缀名怎么都是HTML的呢?也请一同帮忙解决一下
展开
 我来答
sunvins
2009-05-15 · TA获得超过472个赞
知道小有建树答主
回答量:113
采纳率:100%
帮助的人:46.3万
展开全部
用我写的吧,*.rar,*.zip,*.txt,*.doc,中文文件名,测了都没问题,如下:
//这么调用sunvinsDown(root+"/",strFileName,response);就好
public static void sunvinsDown(String filePath,String fileName,HttpServletResponse response)
throws Exception {
File file = new File(filePath+fileName);
if(!file.exists()){
System.out.println("文件不存在");
}else{
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);

OutputStream os=response.getOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(os);

fileName=URLEncoder.encode(fileName,"UTF-8");
fileName=new String(fileName.getBytes("UTF-8"),"GBK");

response.reset();
response.setContentType("UTF-8");
response.setContentType("Application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
response.setHeader("Content-Length", String.valueOf(bis.available()));

int bytesRead=0;
byte[] buffer=new byte[1024];
while((bytesRead=bis.read(buffer))!=-1){
bos.write(buffer,0,bytesRead);
}
bos.flush();
bos.close();
bis.close();

os.close();
fis.close();
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式