在作业中,项目使用文件上传。这个功能很常见。凯哥今天换了公众号,遇到了下载文件无法访问的问题,浏览器也无法访问。这是怎么发生的?遇到很多问题,原来是Tomcat的配置问题!
最近在Linux系统中通过tomcat部署项目后,因为程序有上传文件的功能。上传后,无法查看文件(由 createNewFile 创建)。后来发现文件的权限是-rw-r-----,而文件的属主是root,所以只有属主有root用户组的读权限。
通过研究发现Linux通过umask变量控制创建文件的默认权限。我们知道在Linux系统中,创建文件的最高权限是666,创建文件夹的最高权限是777。系统使用变量umask来控制创建文件的权限。如果umask的值为022,则创建文件的权限为644,即由最高权限减去umask的值来控制。
我们先来看看,上传文件的权限:
我们可以看到,文件上传的时候,文件的所有者是root。但它无法访问。当凯哥手动设置权限为777时,浏览器就可以访问了。但是通过程序上传的时候,上传后文件的所有者也是root,但是权限变成了640.,这个640的权限不能通过ftp访问。凯歌镜像域名指向镜像服务器的根目录。从这个角度来看,应该是权限不足造成的。于是开始了各种尝试。经过分析,我想您没有权限访问 51cto,会不会是tomcat的鬼?于是,经过搜索,看到了一篇文章,但是Linux系统umask的默认值是0022您没有权限访问 51cto,也就是说创建的文件应该有644的权限,而上传的文件有640的权限。后来通过查询Tomcat,发现从tomcat8开始,catalina.sh文件中有如下几行代码
根据文章中的提示,找到了我的tomcat的catalina.sh文件,大概是第286行,如下图:
看了一眼,确实找到了tomcat的配置:
# 设置 UMASK 除非它被覆盖
如果 [ -z "$UMASK" ];那么
#如果是0027,文件上传后,权限为640,无法访问图片域名。需要修改
#UMASK="0027"
fi
umask $UMASK
所以,根据文章,果断修改为“0000”:
保存文件,重启tomcat,重新上传文件,访问,图片正常访问成功!
我们来看看,修改后上传文件的权限:
权限更改后,即可正常访问。