前端download.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'book.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<%=path %>
<body>
<p><a href=DownFileServlet?filename=java.rar>java</a></p>
<p><a href=DownFileServlet?filename=dos.rar>dos</a></p>
<p><a href=DownFileServlet?filename=com.rar>com</a></p>
</body>
</html>
后台servlet:
package com.guohui.test.file;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DownFileServlet
*/
public class DownFileServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 7627015152811667298L;
private static final String CONTENT_TYPE = "text/html; charset=utf-8";
// 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(CONTENT_TYPE);
// 得到下载文件的名字
String filename=request.getParameter("filename");
// 解决中文乱码问题
//String filename = new String(request.getParameter("filename").getBytes(
// "iso-8859-1"), "gbk");
// 创建file对象
//String fileDir = System.getProperty("user.dir",".")+"/dos.rar";// + File.separator + filename;
//File file = new File(fileDir);
InputStream is=getServletContext().getResourceAsStream( "resource"+File.pathSeparator+filename );
String fileDir2 = this.getServletContext().getRealPath("resource");
File file = new File(fileDir2+"/"+filename);
System.out.println(fileDir2+"/"+filename);
System.out.println(File.separator);
//File.pathSeparator// :
//File.separator // /
// 设置response的编码方式
response.setContentType("application/x-msdownload");
// 写明要下载的文件的大小
response.setContentLength((int) file.length());
///设置附加文件名
response.setHeader("Content-Disposition","attachment;filename="+filename);
// 解决中文乱码
//response.setHeader("Content-Disposition", "attachment;filename="
// + new String
// (filename.getBytes("gbk"), "iso-8859-1"));
// 读出文件到i/o流
FileInputStream fis = new FileInputStream(file);
BufferedInputStream buff = new BufferedInputStream(fis);
byte[] b = new byte[1024];// 相当于我们的缓存
long k = 0;// 该值用于计算当前实际下载了多少字节
// 从response对象中得到输出流,准备下载
OutputStream myout = response.getOutputStream();
// 开始循环下载
while (k < file.length()) {
int j = buff.read(b, 0, 1024);
k += j;
// 将b中的数据写到客户端的内存
myout.write(b, 0, j);
}
// 将写入到客户端的内存的数据,刷新到磁盘
myout.flush();
}
// Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// Clean up resources
public void destroy() {
}
}
分享到:
相关推荐
**Django Python3 实例与MySQL数据库的整合** 在Python Web开发领域,Django是一个非常流行且功能强大的框架,它以其“快速开发、清晰设计、内置安全”为特点。本实例将探讨如何在Python3环境下结合Django和MySQL...
总的来说,这个Java上传下载实例是一个很好的学习资源,它涵盖了Web开发中的核心技能,包括文件I/O、HTTP协议、MVC框架的使用以及安全策略等。通过这个实例,开发者能够深化对Web服务端编程的理解,并提升实际项目...
以下是对这个C#下载实例源码的详细解析: 1. **HTTP协议与文件下载**:在Web开发中,文件下载通常涉及到HTTP协议的GET请求。服务器通过响应头(Response Headers)中的`Content-Disposition`字段来指示浏览器以下载...
在"Ajax小实例"中,可能包括以下几个关键步骤: 1. **创建HTML结构**:首先,我们需要在HTML中设置下拉框元素,并为它添加一个事件监听器,如`onchange`,这样当用户改变选择时,会触发指定的JavaScript函数。 2. ...
2. `InetDownloadDlg.cpp`, `InetDownload.cpp`: 这些文件可能包含了实际的网络下载逻辑,比如使用Internet API进行HTTP下载。 3. `StdAfx.cpp`, `StdAfx.h`: 这是Visual C++的标准预编译头文件,用于提高编译速度。...
微信小程序是一种轻量级的应用开发平台,主要针对移动端,由腾讯公司推出,旨在提供便捷的、无需下载安装即可使用的线上服务。在这个“微信小程序实例”中,我们可以深入探讨微信小程序的开发过程,以及如何利用PHP...
本实例源码着重于C#中的一个高级特性——断点续传下载文件,这在处理大文件下载时尤其有用,因为它允许用户在中断后从上次停止的位置继续下载,而不是重新开始。 断点续传技术的基本原理是通过记录已下载文件的部分...
在这个小实例中,模型可能包含一个或多个类,这些类代表了应用中的实体对象,如用户、产品等,并包含了操作这些对象的方法。 2. **View(视图)** 视图层负责展示数据,通常由HTML、CSS和JavaScript组成,呈现给...
描述中提到的“http文件下载实例”,是指使用PowerBuilder 11.5来编写一个应用程序,这个程序能够从HTTP服务器上下载文件。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超...
这个"php实例文件下载更多例子"的资源包,显然是为了帮助初学者和有经验的开发者更好地掌握PHP编程语言。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,特别适合于Web开发,可以嵌入到HTML中使用。...
这个"ASP 下载网站实例"提供了一个完整的ASP应用程序,主要用于实现文件下载功能。通过这个实例,我们可以深入理解ASP的基本原理和实际应用,以及如何构建一个基于ASP的下载平台。 1. ASP基础: ASP是基于HTTP协议...
该项目的特点是“下载即用”,这意味着它包含了一个完整的微信小程序应用的所有组成部分,包括页面、样式、数据接口等,开发者可以直接运行和调试。对于学习者来说,这是一个很好的实践机会,可以通过阅读和修改源码...
实例中可能包含文件上传表单设计、文件存储路径规划及下载功能实现。 9. **WebSocket**:WebSocket是一种在客户端和服务器之间建立持久连接的协议,允许双向通信。如果有的项目涉及到实时数据交换,如聊天室、股票...
在这个"SpringMVC demo 完整源码实例下载.zip"压缩包中,我们可以深入学习和理解SpringMVC的各种核心特性和实际应用。 首先,SpringMVC通过DispatcherServlet作为前端控制器,它负责接收HTTP请求,并根据请求的URL...
微信小程序是一种轻量级的应用形式,可以在微信内直接运行,无需用户下载安装,极大地提升了用户体验。通过.NET技术,开发者可以利用C#等语言的强大功能,实现高效、稳定的小程序开发。 1. .NET框架介绍 .NET框架是...
在本实例中,我们将会探讨如何使用`URLDownloadToFile`以及它与回调函数的结合。 `URLDownloadToFile`的基本语法如下: ```vb Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _ ...
这个实例将详细讲解如何利用文件流来实现文件的下载功能。首先,我们要理解Web API的基本原理,它是一个用于构建RESTful服务的框架,允许通过HTTP协议来传输数据,而文件下载正好可以通过HTTP响应进行。 在本例中,...
微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要应用于移动端,旨在提供便捷的、无需下载安装即可使用的线上服务。本实例汇总包含了完整的微信小程序项目源代码,旨在帮助开发者深入理解和实践微信小...
本文将深入探讨如何实现一个包含进度条的文件下载实例,主要涉及的技术包括下载管理、多线程以及用户界面更新。 首先,我们来理解"下载"这个概念。文件下载是指从远程服务器获取数据并将其存储在本地设备上的过程。...
这个C# FTP下载实例源码是一个基础的FTP下载功能实现,它可以帮助开发者了解FTP网络操作的基本原理。通过学习和理解这个代码,你可以进一步扩展功能,比如添加断点续传、文件大小检查等特性,以满足更复杂的应用场景...