使用nginx+springmvc实现文件下载

文件下载可以通过nginx直接实现,不必通过后端server程序就能直接下载,而且通过nginx下载效率很高,但是有时候需要在server端处理一些业务逻辑,比如统计下载次数,判断是否有权限下载等。如果通过server端程序实现下载,返回文件流,当文件比较大或者并发下载压力较大的时候,效率上跟nginx比就会差很多。现在很多web服务器都提供了相应的解决方法,使用response header来控制下载,nginx相应的response header叫X-Accel-Redirect。

客户端下载文件的时候,最初header中没有X-Accel-Redirect,nginx并不会将文件直接返回,而是传送到后端服务器程序处理,在后端执行完业务逻辑之后可以在response header里添加X-Accel-Redirect的信息,结束处理,当请求返回到nginx之后,根据X-Accel-Redirect的信息,可以将文件返回给客户端。

Nginx 配置样例:

location /protected/ {

   internal;

   root /some/path;

}

internal表示这个是内部指令,只有内部的请求才能使用,客户端不能直接访问,即使客户端伪造 "X-Accel-Redirect" 下载文件也不行。

注意事项:

在使用时候,以下头信息是不能被Nginx更改的(即这些信息得由server端程序来指定!)
  Content-Type
  Content-Disposition
  Accept-Ranges
  Set-Cookie
  Cache-Control
  Expires
如果其中的一些信息没有指定,那么重定向请求设置!

转载于:https://www.cnblogs.com/7mile/p/3221956.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值