任何类型的文件下载时都会弹出文件保存框的实现
来源:互联网 发布:校园招聘网络营销策划 编辑:程序博客网 时间:2024/06/11 21:28
从事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.*;
/**
* <p>Title: 文件下载Servlet</p>
* <p>Description: 文件下载Servlet</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: Tiger, Ltd.</p>
* @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中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>DownloadServlet</servlet-name>
<servlet-class>com.timeschina.servlet.DownloadServlet</servlet-class>
<init-param>
<param-name>downloadPath</param-name>
<param-value>download</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/DownloadServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>
下面是调用该SERVLET的例程
<a href=”servlet/DownloadServlet?downFile=test.zip”>测试</a>
注意:test.zip文件必须存在于WEB服务器主目录下的download目录下!!!
总结:
通过这种方法无论什么类型的文件当用户左键单击文件时,都会弹出另存为的对话框显示给用户。
- 任何类型的文件下载时都会弹出文件保存框的实现
- 任何类型的文件下载时都会弹出文件保存框的实现
- PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件
- PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件
- 如何实现web应用下载文件时不弹出文件保存对话框,而是直接保存到指定的文件中
- ASP实现网页打开任何类型文件都保存的方法
- java 如何实现文件下载时,弹出文件保存窗口
- java 实现文件下载时,弹出文件保存窗口(IE9)
- c实现的文件传输 任何类型的文件
- jsp内存数据下载到本地--弹出的文件保存框时 两次调用action中下载方法问题
- 文件下载时,弹出下载框的方法
- office2010 每次打开WORD 都会弹出安装文件的框框
- 通过WebService上传任何类型的文件
- Java如何实现点击按钮弹出保存文件的选项
- java实现文件下载功能,自动弹出保存窗口
- java实现文件下载功能,自动弹出保存窗口
- java 文件下载的时候后台写了代码,前台没有弹出下载保存的提示框
- Word文件的保存类型
- Trie树(字典树)
- Ext的TabPanel页面加载总结
- 重载和多态
- 初识Expression Tree of Linq
- Anti-alias的前世今生-常用反走样算法总结
- 任何类型的文件下载时都会弹出文件保存框的实现
- 模拟器安装android market
- 在velocity使用toolbox.xml
- 全球手机芯片产业格局未定,LTE和中国是最大变数
- EJB 基本概念
- linux磁盘分区详解
- boost bjam指定编译器版本
- Oracle语句优化规则汇总(1)
- 日文系统 中文软件 系统乱码