Java 下载文件模板

本文介绍了一个使用Java实现的文件下载功能,通过Spring框架的@RequestMapping注解处理HTTP请求,并利用FileDownload类来完成文件的下载过程。该方法支持指定下载文件的路径及下载后的文件名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**下载模版
* @param response
* @throws Exception
*/
@RequestMapping(value="/downExcel")
public void downExcel(HttpServletResponse response)throws Exception{
FileDownload.fileDownload(response, PathUtil.getClasspath() + Const.FILEPATHFILE + "Users.xls", "Users.xls");
}

public class FileDownload {
/**
* @param response 
* @param filePath//文件完整路径(包括文件名和扩展名)
* @param fileName//下载后看到的文件名
* @return  文件名
*/
public static void fileDownload(final HttpServletResponse response, String filePath, String fileName) throws Exception{ 
   byte[] data = FileUtil.toByteArray2(filePath);  
   fileName = URLEncoder.encode(fileName, "UTF-8");  
   response.reset();  
   response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");  
   response.addHeader("Content-Length", "" + data.length);  
   response.setContentType("application/octet-stream;charset=UTF-8");  
   OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());  
   outputStream.write(data);  
   outputStream.flush();  
   outputStream.close();
   response.flushBuffer();
   
} }


/**
* 读取到字节数组2
* 
* @param filePath
* @return
* @throws IOException
*/
public static byte[] toByteArray2(String filePath) throws IOException {
File f = new File(filePath);
if (!f.exists()) {
throw new FileNotFoundException(filePath);
}
FileChannel channel = null;
FileInputStream fs = null;
try {
fs = new FileInputStream(f);
channel = fs.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size());
while ((channel.read(byteBuffer)) > 0) {
// do nothing
// System.out.println("reading");
}
return byteBuffer.array();
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值