用浏览器访问上传到服务器上的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
如果访问不到,就检查internal
和Content-Type
是否合适。