需求:
在页面放置按钮或链接,客户点击即可下载文件
方法:
实现客户点击下载有两种方式: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长连接和短连接涉及网络通信基础、连接管理、...
本项目以"jsp页面,连接数据库实现增删改查"为主题,旨在创建一个用户注册与登录功能,通过与数据库交互来管理用户信息,实现数据的增删改查操作。 首先,我们需要理解JSP的基本原理。JSP是一种服务器端脚本语言,...
Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)。Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)。Java Web实现登陆注册页面前端与后台数据连接(代码+sql文件)。
本教程将深入探讨如何使用Java实现这一功能,并提供相关的源码下载,帮助开发者更好地理解和实践。 首先,我们要知道在Java中,我们通常使用`java.net.URL`类来表示一个网络资源的统一资源定位符,`java.net....
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它允许开发者将Java代码嵌入到HTML页面中,以实现服务器端的数据处理和交互。本篇将详细讲解如何利用NetBeans IDE来实现JSP与数据库的连接,帮助...
java web从入门到精通配套源代码,《Java Web从入门到精通》介绍如何整合Web框架进行J2EE开发,所有实例都基于MyEclipse IDE开发,引领读者快速进入基于JaVa web的J2EE应用领域。《Java Web从入门到精通》开始主要...
这种功能在许多应用程序中非常常见,如下载管理器或者网页浏览器。 首先,我们需要理解下载过程的基本概念。下载是指从远程服务器获取数据并将其存储到本地计算机的过程。在VC++中,我们可以使用WinInet库或WinHTTP...
2. **大客户端**:大客户端通常是一个网页应用,它需要创建WebSocket连接到服务器,监听服务器的响应,并在需要时发送"jump"命令。这可以通过JavaScript的WebSocket API实现。 3. **小客户端**:小客户端也需要一个...
这里我们关注的是一个使用jQuery-UI和jsPlumb库来实现的拖拽连接模型。这两个JavaScript库提供了丰富的功能,使开发者能够轻松创建具有拖放和连接功能的应用程序,比如流程图编辑器、网络拓扑可视化或电路设计工具。...
本话题主要探讨如何在Java环境中实现HTTP长连接,以实现在Web端不刷新页面的情况下自动获取服务器推送的消息。 首先,要实现Web端的长连接,通常需要用到WebSocket协议。WebSocket是HTML5引入的一种在单个TCP连接上...
die("连接失败: " . $conn->connect_error); } ?> ``` 这段代码初始化了一个新的mysqli对象,并尝试连接到指定的MySQL服务器、数据库、用户名和密码。如果连接失败,它会终止脚本并显示错误消息。 接下来,我们来...
在IT行业中,HTTP下载器是常见的工具,用于从互联网上获取资源。连接复用技术是HTTP协议中的一个...通过分析和修改这些文件,我们可以实现一个具有连接复用功能的HTTP下载器,从而提高批量下载网页或其他资源的效率。
在这个特定的例子中,我们关注的是如何使用MFC来实现下载网页的功能。下面将详细讨论涉及到的知识点。 1. **MFC中的网络编程**: MFC包含了对WinInet API的封装,这使得开发者能够进行基本的Internet操作,如HTTP...
在Java中下载网页或文件是一项基础但重要的任务,掌握这一技能有助于进行更复杂的网络编程项目,如爬虫、文件同步等。以上步骤提供了实现这一功能的基本框架,实际开发时还需根据具体需求进行相应的优化和错误处理。