java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...

本文介绍了一种使用Java Servlet强制任何文件下载时弹出文件保存框的方法,适用于需要保护文件不直接被浏览器打开的情况。通过设置HTTP响应头,使浏览器以附件形式下载文件,确保用户可以选择保存路径。
摘要由CSDN通过智能技术生成

post.gif于 2002-12-12 11:09

icon_profile.gificon_pm.gificon_find.gificon_copy.gificon_favorite.gif

ratings10.gif

:):):)任何类型的文件下载时都会弹出文件保存框的实现:(:(:(

简介:

从事WEB程序设计的朋友一定都遇到过这种情况吧,对于一些操作系统可以识别的文件类型如果直接给出文件的链接地址,浏览器就会自动调用相关程序来打开该文件,比如.doc、.txt、.html等等,还有一点这样就会把文件直接暴露给用户,不利于文件的保密工作。所以有必要提供一种方法来改善这种情形,本人通过实践找到了一种方法,希望大家一起探讨一下。

实验环境:

Ø  平台:Windows 2000 Advanced Server

Ø  WEB服务器:TOMCAT4.0.4

Ø  JDK:JDK1.3.1

实现方法:

本人是从事JAVA开发的,所以尝试使用SERVLET来实现该功能,现将代码贴于下面,以供大家参考

package com.timeschina.servlet;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import com.timeschina.common.*;

/**

*

Title: 文件下载Servlet

*

Description: 文件下载Servlet

*

Copyright: Copyright (c) 2002

*

Company: Tiger, Ltd.

* @author TIM

* @version 1.0

*/

public class DownloadServlet extends HttpServlet

{

static final private String CONTENT_TYPE = "text/html; charset=GBK";

//Initialize global variables

public void init() throws ServletException

{

}

//Process the HTTP Get request

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

response.setContentType("text/html; charset=gb2312");

HttpSession session = request.getSession();

//要下载的文件名

//之所以这样处理,主要是因为文件名的中文化问题,这样处理的话,中文文件名也会正常显示

String downloadfile = new String((request.getParameter("downFile")).getBytes("iso8859-1"), "gb2312");

ServletContext context = getServletContext();

ServletConfig config = getServletConfig();

//获取要下载文件所在的目录,这里是对应于服务器上的物理路径

//目录的格式是这样的:

// 根目录(WEB主目录所对应的实际物理目录)

//+虚拟目录(下载文件存放的子目录)

downloadpath = context.getRealPath(File.separator)

+ config.getInitParameter("downloadPath")

+ File.separator;

//构建下载文件的对象

java.io.File file = new java.io.File(downloadpath + downloadfile);

//获得文件的长度

long filesize = file.length();

//设置输出格式

response.addHeader("content-type", "application/x-msdownload;");

response.addHeader("Content-Disposition", "attachment; filename=" + response.encodeURL(downloadfile));

response.addHeader("content-length", Long.toString(filesize));

//向客户端写入文件

java.io.FileInputStream fin = new java.io.FileInputStream(file);

byte[] b = new byte[1];

int j = 0;

while((j = fin.read(b)) > 0)

{

response.getOutputStream().write(b);

}

fin.close();

}

//Process the HTTP Post request

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

}

//Clean up resources

public void destroy()

{

}

}

下面是SERVLET配置文件WEB.XML中的内容:

DownloadServlet

com.timeschina.servlet.DownloadServlet

downloadPath

download

DownloadServlet

/DownloadServlet

20

下面是调用该SERVLET的例程

测试

注意:test.zip文件必须存在于WEB服务器主目录下的download目录下!!!

总结:

通过这种方法无论什么类型的文件当用户左键单击文件时,都会弹出另存为的对话框显示给用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值