文件下载功能实现的两种方式

一.mvc+io流

    java后台代码:

/**
	 * 使用io流拷贝文件到本地
	 * @param response
	 * @param fileName 文件名
	 * @param localFile 文件路径
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public void useIODownloadFile(HttpServletResponse response, String fileName, String localFile)
			throws FileNotFoundException, IOException {
		response.setContentType("application/force-download");
		response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
		File downloadFile = new File(localFile);
		FileInputStream inputStream = new FileInputStream(downloadFile);
		IOUtils.copy(inputStream, response.getOutputStream());
		response.flushBuffer();
	}

注:IOUtil引自Apache.commons包

二.MVC+Nginx的sendFile方式

    1.配置Nginx

        打开sendFile功能:sendfile        on;

        添加如下配置:

        location  /protected {
  internal;
  alias /sftp/data;

}

        解释:internal:禁止浏览器直接下载文件;

                  alias:使用别名,就是以后台代码的路径为准

                  /protected:虚拟路径

    2.后台代码

/**
	 * 使用Nginx转发下载文件到本地(减少内存消耗)
	 * @param response
	 * @param fileName 文件名
	 * @param localFile 文件路径
	 */
	public void useNginxSendFile(HttpServletResponse response, String fileName, String localFile) {
		response.setHeader("Content-Type", "application/octet-stream");
		response.setHeader("X-Accel-Redirect", "/protected" + localFile);
		response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
	}
三.两者比较

    io流下载属于常规的做法,但是文件较大,下载量太多,应用服务器会压力变大,甚至崩溃

    Nginx下载是利用web服务器的sendfile下载,减轻应用服务器压力,推荐用此方式下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值