`

页面下载链接的实现

阅读更多

需求:

在页面放置按钮或链接,客户点击即可下载文件

方法:

实现客户点击下载有两种方式:1,直接提供链接,该链接指到服务器对应的文件,浏览器打不开就会自动下载;2.点击提交请求至服务器,服务器响应数据流,浏览器下载。

实现:

本应用环境--spring mvc +mybatis,数据层涉及不提,主要记录业务层的实现,controller处理

 

@Controller("downloadController")
@RequestMapping(value = "/web")
public class DownloadController {
	
	@Autowired
	CommonsMultipartResolver resolver;
	@Autowired
	ClientProgramService cservice;
	/**
	 * 跳转到下载页面
	 * @return
	 */
	@RequestMapping(value = "/download")
	public ModelAndView donwload() {
		ModelAndView mav = new ModelAndView("download");
		return mav;
	}
	
	/**
	 * 下载程序
	 * @param id
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value="/download/program/{id}")
	public ModelAndView downloadProgram(@PathVariable long id,HttpServletResponse response,HttpServletRequest request) throws IOException{
		ClientProgram program=cservice.get(id);
		String path=program.getPath();
		path=java.net.URLEncoder.encode(path, "utf-8");
		response.sendRedirect("http://www.xxx.com/"+path);
		return null;
	}
	
	/**
	 * 下载文档
	 * @param type
	 * @param response
	 * @param request
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value="/download/document")
	public void download(HttpServletResponse response,HttpServletRequest request) throws IOException{
		String relativePath=request.getServletContext().getRealPath("/")+"upload/client/document/";
		File pfile=new File(relativePath);
		File[] files=pfile.listFiles();
		if(files!=null&&files.length>0){
			String fileName=files[0].getName();
			InputStream in=new FileInputStream(new File(relativePath+fileName));
			OutputStream out=response.getOutputStream();
			response.setContentType(request.getServletContext().getMimeType(relativePath+fileName));
			response.setHeader("Content-Disposition", "attachment; filename=babydancer-directions");
			IOUtils.copy(in, out);
			in.close();
			out.close();
		}else
		     response.getWriter().write("对不起,文件暂时未上传");
	}
}

 

 

 

程序下载使用第一种方式,将客户请求跳转到服务器中指定的文件;文档的下载使用第2种方式,以子节流的形式响应请求,这时就要求设置响应类型response.setContentType和响应头response.setHeader("Content-Disposition", "attachment; filename=..."),可以自己定义输出的文件名称。(注:文件的传输,严格的做法是开辟一个byteArray,以此为单位,每次传输一个arry大小,可以避免内存不足,这里只强调实现方法)

分享到:
评论

相关推荐

    Java实现Socket长连接和短连接

    短连接适合一次性、低延迟、资源有限的场景,如网页浏览。而长连接适合实时性强、需要持续交互的场景,如聊天应用、在线游戏、推送服务等。 综上所述,Java实现Socket长连接和短连接涉及网络通信基础、连接管理、...

    jsp页面,连接数据库实现增删改查

    本项目以"jsp页面,连接数据库实现增删改查"为主题,旨在创建一个用户注册与登录功能,通过与数据库交互来管理用户信息,实现数据的增删改查操作。 首先,我们需要理解JSP的基本原理。JSP是一种服务器端脚本语言,...

    Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)

    Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)。Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)。Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)。

    用JSP实现与数据库的连接

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许开发者将Java代码嵌入到HTML页面中,以实现服务器端的数据处理和交互。本篇将详细讲解如何利用NetBeans IDE来实现JSP与数据库的连接,帮助...

    java web实现数据库连接

    java web从入门到精通配套源代码,《Java Web从入门到精通》介绍如何整合Web框架进行J2EE开发,所有实例都基于MyEclipse IDE开发,引领读者快速进入基于JaVa web的J2EE应用领域。《Java Web从入门到精通》开始主要...

    vc++ 链接下载的实现

    这种功能在许多应用程序中非常常见,如下载管理器或者网页浏览器。 首先,我们需要理解下载过程的基本概念。下载是指从远程服务器获取数据并将其存储到本地计算机的过程。在VC++中,我们可以使用WinInet库或WinHTTP...

    websocket连接两个页面,一个页面控制另外一个页面跳转。

    2. **大客户端**:大客户端通常是一个网页应用,它需要创建WebSocket连接到服务器,监听服务器的响应,并在需要时发送"jump"命令。这可以通过JavaScript的WebSocket API实现。 3. **小客户端**:小客户端也需要一个...

    jQuery-UI和jsPlumb实现拖拽连接模型demo下载

    这里我们关注的是一个使用jQuery-UI和jsPlumb库来实现的拖拽连接模型。这两个JavaScript库提供了丰富的功能,使开发者能够轻松创建具有拖放和连接功能的应用程序,比如流程图编辑器、网络拓扑可视化或电路设计工具。...

    http长连接的实现,web端自动获取消息,不刷新页面

    本话题主要探讨如何在Java环境中实现HTTP长连接,以实现在Web端不刷新页面的情况下自动获取服务器推送的消息。 首先,要实现Web端的长连接,通常需要用到WebSocket协议。WebSocket是HTML5引入的一种在单个TCP连接上...

    PHP 连接mysql数据库做简单的登录页面,实现用户的登录注册功能

    die("连接失败: " . $conn->connect_error); } ?> ``` 这段代码初始化了一个新的mysqli对象,并尝试连接到指定的MySQL服务器、数据库、用户名和密码。如果连接失败,它会终止脚本并显示错误消息。 接下来,我们来...

    http下载器,连接复用技术

    在IT行业中,HTTP下载器是常见的工具,用于从互联网上获取资源。连接复用技术是HTTP协议中的一个...通过分析和修改这些文件,我们可以实现一个具有连接复用功能的HTTP下载器,从而提高批量下载网页或其他资源的效率。

    MFC实现下载网页

    在这个特定的例子中,我们关注的是如何使用MFC来实现下载网页的功能。下面将详细讨论涉及到的知识点。 1. **MFC中的网络编程**: MFC包含了对WinInet API的封装,这使得开发者能够进行基本的Internet操作,如HTTP...

    java实现将网上页面下载到本地

    在Java中下载网页或文件是一项基础但重要的任务,掌握这一技能有助于进行更复杂的网络编程项目,如爬虫、文件同步等。以上步骤提供了实现这一功能的基本框架,实际开发时还需根据具体需求进行相应的优化和错误处理。

Global site tag (gtag.js) - Google Analytics