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

网友投稿 294 2023-04-28


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

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

以下是我的Demo:

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

模板下载

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

@Controller

@RequestMapping("/user")

public class UploadController {

@RequestMapping(value="/courseTab",method=RequestMethod.GET)

public void courseTab(HttpServletjhpmXoZPqwResponse 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);

// jhpmXoZPqw文件路径

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,

Shttp://tring 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 {

http:// 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响应下载实例代码(包含工具类),希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Java使用sqlite 数据库如何生成db文件
下一篇:微信小程序分页加载的实例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~