`
yugouai
  • 浏览: 498556 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JSP下载文件

 
阅读更多

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下载文档

    JSP文件通常由HTML、CSS、JavaScript以及嵌入的Java代码组成。在JSP中,我们使用`&lt;% %&gt;`或`&lt;%= %&gt;`等标签来编写Java代码,这些代码会被服务器执行并将其结果输出到生成的HTML页面上。 在这个"DownloadFile"项目中,...

    JSP下载文件源代码

    根据给定的信息,本文将详细解释如何使用JSP与SmartUpload插件来实现文件下载功能。这主要包括以下几个方面的内容:理解JSP与SmartUpload的基本概念、解析提供的代码示例、以及深入探讨SmartUpload中的关键方法。 #...

    jsp 下载文件

    在Java服务器页面(JSP)中,下载文件是一项常见的任务,尤其在Web应用程序中,用户可能需要下载诸如文档、图片或其他资源。`download.jsp`文件很可能是实现这一功能的一个页面。下面将详细介绍如何使用JSP来实现...

    jsp页面实现文件的下载功能

    在这个场景下,我们关注的是如何在JSP页面中实现文件的下载功能。这个功能在很多网站上都常见,例如提供文档、软件或其他资源的下载服务。下面我们将详细探讨如何实现这一功能。 首先,为了创建一个下载链接,你...

    jsp文件的上传和下载

    在Java Web开发中,JSP(JavaServer Pages)常常用于创建动态网页,配合Servlet处理用户交互,例如文件的上传和下载。本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理...

    java+jsp 文件下载(服务器上的文件)

    在Java和JSP中,实现文件下载是一项常见的任务,它涉及到服务器与客户端之间的交互,以及对文件流的处理。下面将详细讲解如何使用Java和JSP来实现这一功能。 首先,我们从`downloadtool.jsp`开始,这是一个用户界面...

    一个jsp上传文件、下载文件的代码

    在MyEclipse这样的集成开发环境中,开发和调试JSP文件上传下载功能非常便捷。"updowntest"可能是一个项目或文件夹名称,里面可能包含了实现这些功能的JSP页面、Servlet类以及相关的配置文件。 总结来说,这个示例...

    jsp页面下载文件

    在IT行业中,JSP(JavaServer Pages)是一种用于创建...通过分析这些文件,你可以进一步了解JSP文件下载的具体实现细节,以及如何与服务器的文件系统交互。记住,安全性和用户体验是设计下载功能时必须兼顾的重要因素。

    使用jsp下载excel文件

    本文档将详细介绍如何使用Java Server Pages (JSP) 实现从服务器端下载Excel文件到客户端的过程。 #### 二、准备工作 1. **环境配置**: - Java 开发工具包 (JDK) - Apache Tomcat 或其他支持 JSP 的 Web 服务器...

    JSP实现文件上传与下载.pdf

    "JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。...JSP文件上传和下载是Web应用程序中常用的功能,需要注意文件上传和下载的安全性、性能和可扩展性。

    基于jsp的文件上传下载

    "基于jsp的文件上传下载"是Web应用程序中的常见需求,涉及到客户端与服务器之间的数据交互。本项目详细阐述了如何利用JSP实现文件的上传和下载功能。 首先,文件上传涉及的主要技术有HTML表单、Servlet和多部分请求...

    JSP页面文件上传下载实例

    本项目“JSP页面文件上传下载实例”聚焦于如何在JSP环境中实现文件的上传与下载功能,这对于构建交互式的Web应用程序是至关重要的。下面我们将详细探讨相关的知识点。 首先,文件上传功能通常依赖于HTTP协议中的...

    jsp实现上传和下载

    本项目专注于使用JSP来实现文件的上传和下载功能,这对于Web应用程序来说是至关重要的,特别是那些需要处理用户数据交互的系统。 一、JSP上传文件 1. **表单设计**:在JSP页面中,我们需要创建一个HTML表单,包含`...

    在jsp中下载文件

    第一中使用二进制流的方式,这样被文件的文件可以是随意地址,二不必使用“/”开头的路径;...第二种使用RequestDispatcher下载文件,这中下载方式的局限是被下载文件的路径必须以“/”开头,即在项目的webRoot下

    用JSP下载word文件

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而Word文件则是常见的文档格式,广泛用于办公环境中。当我们需要通过Web应用程序提供文件下载服务时,JSP可以作为一个有效的工具。在这个场景中...

    jsp 实现 文件 下载 jsp代码

    jsp 实现 文件下载 jspsmartupload

    使用JSP下载Word和Excel文件

    当你需要让用户从网站上下载Word或Excel文件时,JSP可以扮演关键角色。本篇将详细介绍如何利用JSP实现这一功能,包括核心知识点、步骤解析以及相关的编程技巧。 一、JSP下载原理 在JSP中,我们通常通过Servlet来...

    利用jsp实现文件上传下载

    JSP 实现文件上传下载 在本文中,我们将学习如何使用 JSP 实现文件上传和下载功能。在这个过程中,我们将使用 Apache 的 Commons FileUpload 和 Commons IO 两个库来处理文件上传和下载。 首先,让我们了解一下...

    jsp上传下载文件源代码,通过struts.xml控制在100M以内

    JSP文件被Web容器(如Tomcat)转换为Servlet,然后编译成Java类进行执行。 【Struts框架】 Struts是一个用于构建MVC架构的Java Web应用框架。它提供了处理HTTP请求、分发到相应的Action类、管理视图以及数据绑定等...

    Jsp文件上传下载

    总结来说,JSP文件上传下载是通过SmartUpload库实现的,它简化了文件操作的复杂性,使得开发者能更专注于业务逻辑。通过理解和实践SmartUpload的用法,你将能够为你的Web应用添加这一关键功能。同时,理解文件上传...

Global site tag (gtag.js) - Google Analytics