java 响应码_JavaWeb响应下载功能实例代码(包含工具类)

本文介绍了如何在JavaWeb应用中实现文件的响应下载,包括控制器方法和自定义的DownUtil工具类的使用。通过设置响应头,控制浏览器以附件形式下载文件,并通过BufferedInputStream和BufferedOutputStream读写文件内容。示例代码详细展示了下载Excel模板的实现过程。
摘要由CSDN通过智能技术生成

今天通过本文给大家分享是关于javaweb的响应(response)下载

以下是我的Demo:

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

模板下载

当然,现在的项目大家都使用框架,这里我使用的是(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("");

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();

以上所述是小编给大家介绍的JavaWeb响应下载实例代码(包含工具类),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值