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

凯哥java 凯哥java

前言:

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

正文:

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

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

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

我们可以看到,当文件上传后,文件多所属者是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行左右,如下图:

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

# Set UMASK unless it has been overridden

if [ -z "$UMASK" ]; then

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

#UMASK="0027"

fi

umask $UMASK

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

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

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

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

来看看上传后的文件:

java创建文件 权限_JAVA创建文件后权限不足的问题,无法设置权限的问题相关推荐

  1. java目录实用工具_JAVA 创建文件和文件夹,删除文件和文件夹的实用工具

    package com.file; import java.io.File; import java.io.IOException; //创建新文件和目录 public class CCRDFile ...

  2. java生成文件夹_java 创建文件夹和文件 汇总

    前提 D盘存在文件夹a,文件D:/a/b/c 不存在 1.默认file.exists().file.isFile().file.isDirectory() 均返回 false 2.使用file.cre ...

  3. java视频播放器制作_java创建简易视频播放器

    java创建简易视频播放器 发布时间:2020-09-23 04:28:09 来源:脚本之家 阅读:98 作者:南柯一梦xihe 最近有个多媒体的作业,要求使用visualC++和OpenCV编写一个 ...

  4. java 多种类型文件复制_java多种文件复制方式以及效率比较

    1.背景 java复制文件的方式其实有很多种,可以分为 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,BufferedO ...

  5. java创建线程代码_Java创建与结束线程代码示例

    本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程同步.调度.线程池等内容将会在后续章节中逐步深入. 创建线程 创建普通线程有两种方式,继承Thread类 ...

  6. java zip 文件夹_Java Zip文件文件夹示例

    java zip 文件夹 Today we will look into java zip file example. We will also compress a folder and creat ...

  7. java 批量重命名_Java实现文件批量重命名

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应 ...

  8. java 写入文件流_Java实现文件写入——IO流

    输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据.流是一组有序的数据序列,根据操作的类型,分为输入流和输出流. 程序从输入流读取数据,向输出流写入数据. ...

  9. java io文件操作_java IO 文件操作方法总结

    java IO 文件操作方法总结 对于输入输出的理解: 输入输出,以程序为参考点,外部数据进入程序,通过输入流完成.程序将数据给外部设备,通过输出流完成. 文件Io的操作 //获取文件 File fi ...

最新文章

  1. android weight(权重)的具体分析
  2. gis 数据框裁剪_BIM+GIS的八大挑战!大挑战,见未来
  3. mvvm绑定checkbox wpf_C#框架结构分层:三层结构,DDD,MVC,MVVM,MVP
  4. 动态代理之Rxjava/Retrofit应用实战
  5. MIT谷歌大脑用AI破解失传的古代文字,被称“现代版罗塞塔石碑”丨ACL 2019
  6. CSS中position的几个属性值
  7. ruby学习笔记(2)-chomp,chop的区别
  8. 推荐一个一分钟就可以搭建好的静态文件服务器,基于nodejs
  9. 带你玩转Logview: MaxCompute Logview参数详解和问题排查
  10. jconsole命令 Java Monitoring and Management Console
  11. java linux解压_linux整套java环境解压版
  12. TOONTRACK Electronic Edge EZX(Toontrack打击乐扩展包)
  13. 台式机黑苹果Mac OS Big Sur 11.3.1安装指引
  14. JEOL:推出新型电子探针显微分析仪JXA-iHP200F和JXA-iSP100
  15. 大学生怎样学习一门编程
  16. SEGY数据的读取与写出C++
  17. SpringBoot排序之Order注解
  18. 华为android9.1.0怎么隐藏应用,华为手机怎么隐藏app
  19. 2022年(上半年)信息系统项目管理师考试-综合知识真题及解析(一)
  20. 【彻底解决】Flash经常崩溃的问题

热门文章

  1. win10下无线网络不稳定总掉线
  2. OpenDaylight安装使用
  3. Hive 分支判断 case函数 if函数
  4. 学习记录:关于通过使用express,设置reffer和host获取qq音乐数据
  5. (四)手把手带你搭建精美简洁的个人时间管理网站—相关产品调研
  6. 用虾扑 做 shopee 无货源模式可行吗?
  7. GDAL中通过GDALDriver类的Create函数实现图像的保存
  8. 依赖倒置如何升华架构设计
  9. MongoDB数据库备份(mongodump)以及恢复(mongorestore)
  10. CSS的浮动属性,3面直接拿到offer