使用Nginx的X-Accel-Redirect头实现下载或模拟访问文件

用浏览器访问上传到服务器上的PDF文件,假设20190412/171534680646.pdf文件在/srv/upload/rcb/

现在这里我们想通过/sfile实现访问地址的模拟实际地址/srv/upload/rcb/下的pdf文件,如下操作:

  • 配置
    在nginx的server中配置如下:
set $original_root "/srv/upload/rcb/";   # pdf上传后存放路径
location /sfile {
            internal;    # 重点
            alias $original_root;
        }
  • internal指的是Nginx的内部命令,意思是只有内部请求才能使用的,外部请求返回404
  • python代码
@restapi.bp.route('/sfile/<name:[A-Za-z0-9/._]+>', methods=["GET"])
async def sfile(request, name):
    r = json({"status": 0})
    r.headers['Content-Type'] = 'application/pdf'         # 文件类型
    r.headers['X-Accel-Redirect'] = f'/sfile/{name}'    #重定向
    return r
  • 在访问图片/视频/PDF等文件时,需要在头信息headers[‘Content-Type’]知名文件类型 ,不然默认类型为application/json
  • headers[‘X-Accel-Redirect’] 是向服务器提交了一个内部请求,Nginx会将这个链接转到实际的地址

请求地址:http://localhost:8080/XXX/sfile/20190412/171534680646.pdf

如果访问不到,就检查internalContent-Type是否合适。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值