Javaweb上传文件到Linux 没有读写权限

17 篇文章 0 订阅
4 篇文章 0 订阅

一、 问题描述

背景描述:

0.saas-business-运营后台,website-网站页面。

1.javaweb程序(saas-business)部署在linux系统 tomcat服务器下,使用该程序里面上传图片功能,上传图片至linux服务器挂载盘(共享盘)中/nfs/uploads/目录下。tomcat是以root用户来运行的。

2.website,部署在另一台linux系统ngxin容器中,该台linux系统也挂载了(共享盘)/nfs/uploads/目录。ngixn是以其他组的角色来运行的。

操作:
我通过saas-business里面的上传图片功能 ,上传图片到/nfs/uploads/下,查看服务器,确实已经上传成功。
然后在浏览器中访问website程序,却访问不到刚刚上传的图片。


问题:图片成功上传到linux服务器共享盘中,但却在网页中访问不到!

二、 表面原因

在linux 中挂在盘目录下,查看刚刚上传的图片:确实已经上传成功。

[root@tmp4 backgroundImg]# ll
总用量 408
-rw-r----- 1 root root 414642 7月  11 17:27 login_background.jpg

可以看到 login_background.jpg图片,对于当前 拥有者 、群组 、其它组 分别是:读写、读、无。显而易见,websitenginx容器以其他组的一个用户来运行的,所有没有任何权限。
找到表面原因,我们可以直接修改图片的权限。

[root@tmp4 backgroundImg]# chmod 644 login_background.jpg  
[root@tmp4 backgroundImg]# ll
总用量 408
-rw-r--r-- 1 root root 414642 7月  11 17:27 login_background.jpg

此时,通过网站访问 该图片便没有问题。

三、 根本原因

因为tomcat版本的差别。我当前使用的是tomcat8.5.+,当我将为tomcat8.0.24版本便没有此问题。
下面,做的配置,是以tomcat8.5.+版本 为例的。

a)、检查linux

linux文件访问默认权限与umask有关,查看系统默认配置(/etc/profile)是否正常,如果是002或022就正常没有问题。

[umask 002 对应文件权限664,文件夹权限775;
umask 022对应文件权限644,文件夹权限755]

b)、检查tomcat

打开bin/catalina.sh文件,检查大概在263行左右。
将0027改改为0022,重启tomcat,上传访问的问题解决。

清单一、原代码
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
清单二、修改为
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0022"
fi
c)、重启tomcat
sh shutdown.sh(关闭)
sh startup.sh 或者 ./startup.sh(启动)

四、总结:

Javaweb上传文件到Linux 没有读写权限,最后总结有以下3种解决方案。
1.将程序在容器中以root用户运行。这时候运行权限最高。(如,我可以将website,由其他用户组的nginx角色,改为所有者root权限,便没有此问题)。
2.降低我的tomcat版本。(这个也是可行的)
3.修改tomcat中的bin/catalina.sh配置,并重启tomcat(这个我觉得是最根本的,推荐使用)

彩蛋:查看程序启动用户,ps -ef | grep tomcat

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
功能介绍 名称:自动上压缩工具 作用:用于同城购开发团队多人合作开发升级时使用,升级文件列表文件upgrade.config,在开发工作完成后推送即可 开发环境:使用.net 2.0 开发,使用时必须安装.net 2.0环境 upgrade.config 文件说明 属性说明:type:文件类型css、js ;bak="true":备份,bak="false"不备份 <item type="css">test/test.css</item>//自动压缩,自动备份 <item type="js" bak="false">test/test.js</item> //自动压缩,不备份 <item>test/test.jpg</item>//上并备份 <item bak="false">test/test.jpg</item>//上不备份 <item>test/a/*.jpg</item>//批量上 css文件支持压缩,默认备份 使用说明:将upgrade.config文件放到本地网站根目录,然后设置好相应的工具配置config.ini项就可使用了。 新增功能 2013-4-13 1.使用js压缩工具的时候可用google的Compiler库,需要设置java目录的环境变量 2.多人协作使用新增了include语法,例子在upgrade.config中设置 3.自动识别了js、css文件类型,并能自动压缩 4.配置说明 <include file="templates/upgrade.ini" defpath="templates" bak="false" type="list" /> defpath:默认路径名称,如果团队成员只允许一个目录的权限则有必要设置 bak:备份默认 type:只有值为list的时候,才允许下级配置列表使用单行文件列表 <include file="upgrade.ini" defpath="" bak="false" type="list" /> upgrade.ini 文件配置说明 注释:采用符号;或者#开头的识别为注释 列表方式:直接文件路径

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值