从服务器上下载文件的方法

本文介绍了一种使用Java实现文件下载的方法,特别适用于需要提供Excel表格下载的场景。该方法通过封装一个通用的下载函数简化了操作流程,并确保了下载过程中的文件名编码正确。

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

有时候需要提供一些文件供用户下载,本文就写了一个支持文件下载的方法,供参考:

例子需要下载的是Excel表格,具体实现:、

封装一个下载方法,方便使用:

 

/**
 * 下载文件
 * 创建人:A-bing
 * 创建时间:2018年2月2日
 */
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();
		} 
}

实现方法:

备注:demo里面的文件是放在服务器上的,本地通过页面调用下载方法的时候,下载的文件在浏览器默认的下载路径里面,自己找一找。

/*
	 * 调账Excel模版下载
	 */
	@RequestMapping("")
	public void xiazaiexcel(HttpServletResponse response) throws Exception{
		String filePath = "E://utilPicture//file//tiaozhangExcel.xls";
		String fileName = "tiaozhang.xls";
		FileDownload.fileDownload(response, filePath, fileName);
	}

完了#24

PS:补上

封装的toByteArray2方法:
/**
	 * 读取到字节数组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();
			}
		}
	}

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值