java创建文件 权限_JAVA创建文件后权限不足的问题,无法设置权限的问题「建议收藏」

java创建文件 权限_JAVA创建文件后权限不足的问题,无法设置权限的问题「建议收藏」JAVA创建文件后权限不足的问题,无法设置权限的问题凯哥java凯哥java前言:在工作中,项目使用到文件上传,这个功能是很常见的吧。今天,凯哥修改自己的公众号的时候,遇到了一个问题:那就是上传后的文件访问不到,使用浏览器访问不到了。怎么办呢?经过多次查询,发现竟然是因为tomcat的配置原因!正文:最近在Linux系统中通过tomcat部署项目后,由于程序有上传文件功能。而上传后的却无法查看…

大家好,又见面了,我是你们的朋友全栈君。

JAVA创建文件后权限不足的问题,无法设置权限的问题

凯哥java 凯哥java

前言:

在工作中,项目使用到文件上传,这个功能是很常见的吧。今天,凯哥修改自己的公众号的时候,遇到了一个问题:那就是上传后的文件访问不到,使用浏览器访问不到了。怎么办呢?经过多次查询,发现竟然是因为tomcat的配置原因!

正文:

最近在Linux系统中通过tomcat部署项目后,由于程序有上传文件功能。而上传后的却无法查看文件(通过createNewFile创建)。后来发现文件的权限为-rw-r—–,而文件的拥有者是root,这样就只有拥有者有root用户组的拥有读取权限。

通过研究发现,Linux通过umask变量来控制创建文件的默认权限问题。我们知道在Linux系统规定,创建文件的最高权限为666,而创建文件夹的最高权限为777,系统通过变量umask来控制创建文件的权限问题。如果当umask的值为022时,则创建的文件权限为644,即权限是通过最高权限减去umask的值来控制的。

先来看看,凯哥上传后文档的权限:

9d38a1f3d2036c3a4843dd7cf52fa246.png

我们可以看到,当文件上传后,文件多所属者是root.但是访问不了,凯哥手动设置权限为777的时候,浏览器就可以访问到了。但是通过程序上传的时候,文件上传后所属者也是root,但是权限变成了640.而这个640权限,通过ftp是访问不到的。凯哥图片域名指向了图片服务器的根目录。这样来看,应该是权限不够导致的。于是开始各种尝试。分析后,想,会不会是tomcat自己搞的鬼呢?于是,搜索后,看到一篇文章:

通过研究发现,Linux通过umask变量来控制创建文件的默认权限问题。我们知道在Linux系统规定,创建文件的最高权限为666,而创建文件夹的最高权限为777,系统通过变量umask来控制创建文件的权限问题。如果当umask的值为022时,则创建的文件权限为644,即权限是通过最高权限减去umask的值来控制的。

但Linux系统umask的默认值是0022,也就是说创建的文件应该是644的权限,而上传的文件却是640的权限。后来通过对查询Tomcat发现从tomcat8开始,catalina.sh文件中有下面几行代码

于是根据文章提示,找到自己tomcat的catalina.sh文件,大概在286行左右,如下图:

8c57d74e022cd183423fbc6351d40cab.png

一看,确实发现,tomcat的配置:

# Set UMASK unless it has been overridden

if [ -z “$UMASK” ]; then

#如果是0027的话,文件上传后,权限640,图片域名访问不到。需要修改

#UMASK=”0027″

fi

umask $UMASK

于是,根据文章,果断修改成“0000”:

4ba1bfca555bb179ced08841df4f5cee.png

保存文件,重启tomcat,重新上传文件后,进行访问,图片正常访问成功!

来看看,修改后,上传文件的权限:

e0eeaf3c542537066f1c3c688e0bea6b.png

权限变化后,就可以正常访问了。明天,就可以在凯哥,自己的公众号后台,编辑文章了。不用在到公众号官方后台编辑了。开心!~

来看看上传后的文件:

41c19523fe19c86cfb26e81c0bfe78b7.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150438.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA的垃圾回收机制_java的内存回收机制

    JAVA的垃圾回收机制_java的内存回收机制一:垃圾回收机制的意义java语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存;内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般…

    2022年10月10日
    2
  • 在64位windows下使用instsrv.exe和srvany.exe创建windows服务「建议收藏」

    在64位windows下使用instsrv.exe和srvany.exe创建windows服务「建议收藏」http://blog.csdn.net/yaoyaoxingkong/article/details/8431945

    2022年5月8日
    42
  • Python之PIL生成验证码

    Python之PIL生成验证码

    2021年5月24日
    136
  • was ejb学习[通俗易懂]

    was ejb学习[通俗易懂]最近因为项目需要,对ilog进行了学习,包括ilog在was的安装以及客户端连接ilog等内容。个人感觉很多是通过ejb来进行查找及调用的,所以,特意自己做了一个ejb在was上部署以及客户端连接的例子:[b][color=red]1、ejb方面[/color][/b]ejb采用ejb2,分三个类:Hello、HelloHome、HelloWord;[color…

    2022年9月29日
    2
  • oracle 优化GROUP BY[通俗易懂]

    提高GROUPBY语句的效率,可以通过将不需要的记录在GROUPBY之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多.低效:SELECTJOB,AVG(SAL)FROMEMPGROUPJOBHAVINGJOB=‘PRESIDENT’ORJOB=‘MANAGER’高效:SELECTJOB…

    2022年4月10日
    62
  • calendar 月份加减_calendar获取时间

    calendar 月份加减_calendar获取时间calendar类,日期加减Java代码public class test1 {        public static void main(String[] args) {            Calendar c = Calendar.getInstance();            int year=c.get(Calendar.YEAR);                 …

    2022年9月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号