JavaWeb响应下载(包含工具类)

纸上得来终觉浅,绝知此事要躬行!今天博主分享是关于javaweb的响应(response)下载

以下是我的Demo:

页面我就粘主要部分的代码

<a href = "${pageContext.request.contextPath }/user/courseTab">模板下载</a>

当然,现在的项目大家都使用框架,这里我使用的是(SSM),好了,粘代码

@Controller
@RequestMapping("/user")
public class UploadController {
@RequestMapping(value="/courseTab",method=RequestMethod.GET)
	public void courseTab(HttpServletResponse response,HttpServletRequest request) throws IOException{
		String path = request.getSession().getServletContext().getRealPath("/courseTab/课表上传模板.xls");
		DownUtil.downMb(response, path, "课表模板"+DateFormat.formatSimple(new Date()));
}
}

这里我使用的DownUtil工具类是我自己写的,下来我粘到文章中

package org.cxxy.base.cxsc.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletResponse;

/**
 * @Title: DownUtil.java
 * @Package org.cxxy.base.cxsc.util
 * @Description:文件下载工具类
 * @author ChoviWu
 * @date 2017年6月18日 下午2:44:17
 * @version V1.0
 */
public class DownUtil {

	/**
	 *
	 * @Description:
	 * @param @param response
	 * @param @param url 文件在数据库的路径
	 * @param @param base 文件存放的基础路径
	 * @param @param folderPath 上传所在的文件夹
	 * @param @return
	 * @param @throws IOException
	 * @return int
	 * @throws
	 */
	@SuppressWarnings("unused")
	public static int downFile(HttpServletResponse response, String url,
			Integer down, String base, String folderPath) throws IOException {
		// 文件的名称
		String fileName = url.split("/")[1];
		System.out.println(fileName);
		// 文件的后缀
		String last = url.substring(url.lastIndexOf(".") + 1);
		System.out.println(last);
		// 文件路径
		String downFilePath = base + folderPath + fileName;

		Long fileLength = new File(downFilePath).length();// 文件的长度
		if (fileLength != 0) {
			response.reset();
			response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
			try {
				response.setHeader(
						"Content-disposition",
						"attachment; filename="
								+ new String(fileName.getBytes("utf-8"),
										"ISO8859-1"));
				response.setHeader("Content-Length", String.valueOf(fileLength));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			BufferedInputStream bis = null;
			BufferedOutputStream bos = null;
			FileInputStream fis = null;
			try {
				fis = new FileInputStream(downFilePath);
				bis = new BufferedInputStream(fis);
				// 输出流
				bos = new BufferedOutputStream(response.getOutputStream());
				byte[] buff = new byte[2048];
				int bytesread;
				// 写文件
				while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
					bos.write(buff, 0, bytesread);
				}
				// 跳转的路径
				fis.close();
				bis.close();
				bos.close();

			} catch (FileNotFoundException e) {
				System.out.println("File is Not Exsist!");
			}

		} else {
			// 抛异常
			response.getWriter()
					.write("<script charset=‘utf-8‘ type=‘text/javascript‘>alert(‘该资源不存在!‘);history.go(-1);</script>");
			return down;
		}
		down++;
		return down;
	}

	/**
	 *
	 * @Description: 下载的模板
	 * @param @param response
	 * @param @param path 路径名
	 * @param @param name 模板名称
	 * @param @throws IOException
	 * @return void
	 * @throws
	 */
	@SuppressWarnings("unused")
	public static void downMb(HttpServletResponse response, String path,
			String name) throws IOException {

		Long fileLength = new File(path).length();// 文件的长度
		System.out.println("文件的长度:" + fileLength);
		if (fileLength != 0) {
			response.reset();
			response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
			try {
				response.setHeader(
						"Content-disposition",
						"attachment; filename="
								+ new String(name.getBytes("utf-8"),
										"ISO8859-1"));
				response.setHeader("Content-Length", String.valueOf(fileLength));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			BufferedInputStream bis = null;
			BufferedOutputStream bos = null;
			FileInputStream fis = null;
			try {
				fis = new FileInputStream(path);
				bis = new BufferedInputStream(fis);
				// 输出流
				bos = new BufferedOutputStream(response.getOutputStream());
				byte[] buff = new byte[2048];
				int bytesread;
				// 写文件
				while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
					bos.write(buff, 0, bytesread);
				}
				fis.close();
				bis.close();
				bos.close();

			} catch (FileNotFoundException e) {
				System.out.println("File is Not Exsist!");

			}
		}
	}
}

下来,我说一下,调用的downMb,我们都知道,在服务器上下载一个文件,

//设置响应头,控制浏览器下载该文件,形参调的是文件的长度

response.setHeader("Content-Length", String.valueOf(fileLength));

//设置响应类型,设置输出流类型

response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件

这里我使用的是输出的Excel文件

接下来就是读文件,写文件了,相信学了java基础的都会接触IO吧,这里我就略过

BufferedInputStream bis = null;
BufferedOutputStream bos = null;

这里使用的是缓冲流,因其使用的是浏览器打开文件的下载

下来就是写文件了,写文件也是一贯的套路,先把文件存到buff数据缓冲区,然后将buff的数据输出到浏览器供用户查看

byte[] buff = new byte[2048];
	int bytesread;
	// 写文件
	while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
		bos.write(buff, 0, bytesread);
	}

当读写完文件之后,千万别忘了要关闭文件流(当然,关闭流的顺序也不能变)

fis.close();
bis.close();
bos.close();
时间: 2024-11-05 18:48:17

JavaWeb响应下载(包含工具类)的相关文章

FTP下载文件工具类

FTP文件下载需要的jar包commons-net-2.0.jar有时还需要:jakarta-oro.jar 1 package com.wdxc.util; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.util.HashMap; 8 import java.util.Ma

JavaWeb基础之JdbcUtils工具类2.0

使用c3p0连接池来改版JdbcUtils工具 1. 使用c3p0连接池获取连接,使代码更加简单 1 /** 2 * 使用c3p0连接池做小工具 3 * JdbcUtils v2.0 4 * @author hui.zhang 5 * 6 */ 7 public class JdbcUtils { 8 // 配置文件的默认配置,必须给出c3p0-config.xml 9 private static ComboPooledDataSource dataSource = new ComboPool

android连接服务器下载文件工具类

public static File downLoad(String serverPath,String savedPath,ProgressDialog dialog){ try { URL url=new URL(serverPath); HttpURLConnection _conn=(HttpURLConnection) url.openConnection(); _conn.setRequestMethod("GET"); _conn.setConnectTimeout(50

高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上传下载. 这两种感觉都有利弊. 第一种实现了代码复用,但是配置信息全需要写在类中,维护比较复杂. 第二种如果是spring框架,可以通过propertis文件,动态的注入配置信息,但是又不能代码复用. 所以我打算自己实现一个工具类,来把上面的两种优点进行整合.顺便把一些上传过程中一些常见的问题也给解

用Java编写的http下载工具类,包含下载进度回调

HttpDownloader.java package com.buyishi; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class HttpDownloader { private final String url, destFilename

ThinkPHP Http工具类(用于远程采集 远程下载) phpSimpleHtmlDom采集类库_Jquery筛选方式 使用phpQuery轻松采集网页内容

[php]代码库 view sourceprint? <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 200

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近.  很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实现签到 这次 我们实现 javaweb http json 交互 in action 题目很长,但我想让你们看下,给我点意见. 开始吧 实战 本次以经典的登录作为案例.登录做的好也是经典. 服务端 和 app端,服务端简略,app端详细介绍... 服务端 资料: <spring> @Respons

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

前言 系列文章:[传送门] 洗了个澡,准备写篇博客.然后看书了.时间 3 7 分.我慢慢规律生活,向目标靠近.  很喜欢珍惜时间像叮当猫一样 正文 慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实现签到 这次 我们实现 javaweb http json 交互 in action 题目很长,但我想让你们看下,给我点意见. 开始吧 实战 本次以经典的登录作为案例.登录做的好也是经典. 服务端 和 app端,服务端简略,app端详细介绍... 服务端 资料: <spring> @Respons

Java 压缩文件夹工具类(包含解压)

依赖jar <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.18</version> </dependency> CompressUtils.java package utils; import java.io.BufferedInputStream;