JSP下载远程服务器文件,通过数据流的方式获取。后台代码如下:
@RequestMapping public void requestDownlod(HttpServletResponse response, String filePath){ RemoteDownLoadHelper helper = new RemoteDownLoadHelper(); String resultFileAbsolutePath = helper.getTargetFilePath(filePath); List<File> fileList = FileUtil.listFiles(resultFileAbsolutePath); for (File file : fileList) { logger.info(file.getAbsolutePath()); } File file = new File(resultFileAbsolutePath); InputStream inputStream = null; OutputStream outputStream = null; int BUFFER_SIZE = 1024; byte[] b = new byte[BUFFER_SIZE]; int len = 0; try { inputStream = new FileInputStream(file); outputStream = response.getOutputStream(); response.setContentType("application/force-download"); String filename = file.getName(); // filename = filename.substring(36, filename.length()); response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));//中文编码问题处理 response.setContentLength( (int) file.length( ) ); while((len = inputStream.read(b)) != -1){ outputStream.write(b, 0, len); } } catch (Exception e) { }finally{ IOUtils.closeQuietly(inputStream); IOUtils.closeQuietly(outputStream); helper.deletePath(resultFileAbsolutePath); } }
RemoteDownLoadHelper类处理部分Controller的逻辑
public class RemoteDownLoadHelper { public String getTargetFilePath(String filePath){ //第一步,将传入的filePath进行gz压缩 String targetPath = new File(filePath).getParent(); String resultFileAbsolutePath = CompressFileUtil.compressedFile(filePath, targetPath); return resultFileAbsolutePath; } public boolean deletePath(String filePath){ return FileUtils.deleteQuietly(new File(filePath)); } }
CompressFileUtil为压缩工具类,先压缩再传输下载
public class CompressFileUtil { /** * @desc 将源文件/文件夹生成指定格式的压缩文件,格式zip * @param resourePath 源文件/文件夹 * @param targetPath 目的压缩文件保存路径 * @return void * @throws Exception */ public static String compressedFile(String resourcesPath, String targetPath) { File resourcesFile = new File(resourcesPath); // 源文件 ZipOutputStream out = null; File targetFile = new File(targetPath); // 目的 // 如果目的路径不存在,则新建 if (!targetFile.exists()) { targetFile.mkdirs(); } String targetName = resourcesFile.getName() + ".zip"; // 目的压缩文件名 FileOutputStream outputStream; String targetAbsolutePath = targetPath + "/" + targetName; try { outputStream = new FileOutputStream(targetAbsolutePath); out = new ZipOutputStream(new BufferedOutputStream(outputStream)); createCompressedFile(out, resourcesFile, ""); } catch (FileNotFoundException e) { e.printStackTrace(); }finally{ IOUtils.closeQuietly(out); } return targetAbsolutePath; } /** * @desc 生成压缩文件。 如果是文件夹,则使用递归,进行文件遍历、压缩 如果是文件,直接压缩 * @param out 输出流 * @param file 目标文件 * @return void * @throws Exception */ private static void createCompressedFile(ZipOutputStream out, File file, String dir) { // 如果当前的是文件夹,则进行进一步处理 FileInputStream fis = null; try { if (file.isDirectory()) { // 得到文件列表信息 File[] files = file.listFiles(); // 将文件夹添加到下一级打包目录 out.putNextEntry(new ZipEntry(dir + "/")); dir = dir.length() == 0 ? "" : dir + "/"; // 循环将文件夹中的文件打包 for (int i = 0; i < files.length; i++) { createCompressedFile(out, files[i], dir + files[i].getName()); // 递归处理 } } else { // 当前的是文件,打包处理 // 文件输入流 fis = new FileInputStream(file); out.putNextEntry(new ZipEntry(dir.equals("")?file.getName():dir));//兼容单独文件压缩时文件名为空字符串 // 进行写操作 int j = 0; byte[] buffer = new byte[1024]; while ((j = fis.read(buffer)) > 0) { out.write(buffer, 0, j); } } } catch (IOException e) { e.printStackTrace(); } finally { // 关闭输入流 IOUtils.closeQuietly(fis); } } }
后台通过Reponse返回获取的数据流,在前端下载通过ajax+jquery下载
// Ajax 文件下载 jQuery.download = function (url, data, method) { // 获取url和data if (url && data) { // data 是 string 或者 array/object data = typeof data == 'string' ? data : jQuery.param(data); // 把参数组装成 form的 input var inputs = ''; jQuery.each(data.split('&'), function () { var pair = this.split('='); inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />'; }); // request发送请求 jQuery('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>') .appendTo('body').submit().remove(); }; };
JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form,用这个form提交参数,并返回“流”类型的数据。
调用:
jQuery.download('<%=request.getContextPath()%>/requestDownlod.do','filePath='+filePath,'post');
参考:
http://www.16kan.com/question/detail/293686.html
相关推荐
JSP文件通常由HTML、CSS、JavaScript以及嵌入的Java代码组成。在JSP中,我们使用`<% %>`或`<%= %>`等标签来编写Java代码,这些代码会被服务器执行并将其结果输出到生成的HTML页面上。 在这个"DownloadFile"项目中,...
根据给定的信息,本文将详细解释如何使用JSP与SmartUpload插件来实现文件下载功能。这主要包括以下几个方面的内容:理解JSP与SmartUpload的基本概念、解析提供的代码示例、以及深入探讨SmartUpload中的关键方法。 #...
在Java服务器页面(JSP)中,下载文件是一项常见的任务,尤其在Web应用程序中,用户可能需要下载诸如文档、图片或其他资源。`download.jsp`文件很可能是实现这一功能的一个页面。下面将详细介绍如何使用JSP来实现...
在这个场景下,我们关注的是如何在JSP页面中实现文件的下载功能。这个功能在很多网站上都常见,例如提供文档、软件或其他资源的下载服务。下面我们将详细探讨如何实现这一功能。 首先,为了创建一个下载链接,你...
在Java Web开发中,JSP(JavaServer Pages)常常用于创建动态网页,配合Servlet处理用户交互,例如文件的上传和下载。本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理...
在Java和JSP中,实现文件下载是一项常见的任务,它涉及到服务器与客户端之间的交互,以及对文件流的处理。下面将详细讲解如何使用Java和JSP来实现这一功能。 首先,我们从`downloadtool.jsp`开始,这是一个用户界面...
在MyEclipse这样的集成开发环境中,开发和调试JSP文件上传下载功能非常便捷。"updowntest"可能是一个项目或文件夹名称,里面可能包含了实现这些功能的JSP页面、Servlet类以及相关的配置文件。 总结来说,这个示例...
在IT行业中,JSP(JavaServer Pages)是一种用于创建...通过分析这些文件,你可以进一步了解JSP文件下载的具体实现细节,以及如何与服务器的文件系统交互。记住,安全性和用户体验是设计下载功能时必须兼顾的重要因素。
本文档将详细介绍如何使用Java Server Pages (JSP) 实现从服务器端下载Excel文件到客户端的过程。 #### 二、准备工作 1. **环境配置**: - Java 开发工具包 (JDK) - Apache Tomcat 或其他支持 JSP 的 Web 服务器...
"JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。...JSP文件上传和下载是Web应用程序中常用的功能,需要注意文件上传和下载的安全性、性能和可扩展性。
"基于jsp的文件上传下载"是Web应用程序中的常见需求,涉及到客户端与服务器之间的数据交互。本项目详细阐述了如何利用JSP实现文件的上传和下载功能。 首先,文件上传涉及的主要技术有HTML表单、Servlet和多部分请求...
本项目“JSP页面文件上传下载实例”聚焦于如何在JSP环境中实现文件的上传与下载功能,这对于构建交互式的Web应用程序是至关重要的。下面我们将详细探讨相关的知识点。 首先,文件上传功能通常依赖于HTTP协议中的...
本项目专注于使用JSP来实现文件的上传和下载功能,这对于Web应用程序来说是至关重要的,特别是那些需要处理用户数据交互的系统。 一、JSP上传文件 1. **表单设计**:在JSP页面中,我们需要创建一个HTML表单,包含`...
第一中使用二进制流的方式,这样被文件的文件可以是随意地址,二不必使用“/”开头的路径;...第二种使用RequestDispatcher下载文件,这中下载方式的局限是被下载文件的路径必须以“/”开头,即在项目的webRoot下
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而Word文件则是常见的文档格式,广泛用于办公环境中。当我们需要通过Web应用程序提供文件下载服务时,JSP可以作为一个有效的工具。在这个场景中...
jsp 实现 文件下载 jspsmartupload
当你需要让用户从网站上下载Word或Excel文件时,JSP可以扮演关键角色。本篇将详细介绍如何利用JSP实现这一功能,包括核心知识点、步骤解析以及相关的编程技巧。 一、JSP下载原理 在JSP中,我们通常通过Servlet来...
JSP 实现文件上传下载 在本文中,我们将学习如何使用 JSP 实现文件上传和下载功能。在这个过程中,我们将使用 Apache 的 Commons FileUpload 和 Commons IO 两个库来处理文件上传和下载。 首先,让我们了解一下...
JSP文件被Web容器(如Tomcat)转换为Servlet,然后编译成Java类进行执行。 【Struts框架】 Struts是一个用于构建MVC架构的Java Web应用框架。它提供了处理HTTP请求、分发到相应的Action类、管理视图以及数据绑定等...
总结来说,JSP文件上传下载是通过SmartUpload库实现的,它简化了文件操作的复杂性,使得开发者能更专注于业务逻辑。通过理解和实践SmartUpload的用法,你将能够为你的Web应用添加这一关键功能。同时,理解文件上传...