java创建文件 权限_JAVA创建文件后权限不足的问题,无法设置权限的问题-程序员宅基地

技术标签: java创建文件 权限  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34149824/article/details/114182059

智能推荐

java 换行符 常量_6.java常量-程序员宅基地

文章浏览阅读1.1k次。Java中常量的分类:整数常量 : 所有整数小数常量 : 所有小数布尔常量 : 只有true和false字符常量 :使用’’引起来的单个字符字符串常量 :使用“”引起来的字符序列,“” 、“a” 、” ”null常量 : 只有一个值nullchar类型char类型表示的是单个字符类型,任何数据使用单引号括起来的都是表示字符。字符只能有一个字符,比如:普通的老百姓穿上军装就是军人。注意:特殊字符的..._java换行符用単引吗

计算机网络层之 P2P_p2p参与通信的主机叫-程序员宅基地

文章浏览阅读1.6k次。原文地址:http://write.blog.csdn.net/postedit一、什么是P2P对等网络(PeertoPeer,简称P2P)也称为对等连接,是一种新的通信模式,每个参与者具有同等的能力,可以发起一个通信会话。这个定义有点抽象,下面就来简单地解释一下。粗略地讲,应用程序可以设计成采用客户机/服务器体系结构或对等体系结构(P2P)。我们日常生活中的许多应用程_p2p参与通信的主机叫

Python连接MongoDB集群_python 连接mongodb集群-程序员宅基地

文章浏览阅读3.2k次。1、安装pyMongo(前提:必须安装了python和pip)打开cmd输入pip instal pymongo,等待安装完成;2、连接MongoDB代码如下:from pymongo import MongoClient, ReadPreferencedef db_conn(): client = MongoClient(['192.168.2.188:20000', '1..._python 连接mongodb集群

Baumer(堡盟)工业相机SDK开发 C++_baumer gapi sdk 安装教程 windows-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏26次。本文介绍了Baumer相机BGAPI 2的使用方法以及相机采集Demo的开发流程。​SDK链 接 :https://pan.baidu.com/s/1jyozD7v4mfchzbv2GtnGig 提取码:puol​_baumer gapi sdk 安装教程 windows

chrome--浏览器调试工具详解_浏览器调试工具使用-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏26次。chrome浏览器开发调试工具打开方式:F12键一,常用面板介绍1.定位小箭头按钮(左边第一个):选中Elements面板,并启动该按钮,可以在页面中定位相应元素的源代码位置,或者选择源代码位置可定位到页面相应的元素。2.手机-PC视图切换按钮(左边第二个):启动该按钮,网页可以在pc网址网页和手机网址网页之间进行转换。由于在爬虫过程中,爬取手机网址网页相对来说更容易,所以可以通过该按..._浏览器调试工具使用

Spring中的ResponseBody注解的作用_springboot responsebody注解作用-程序员宅基地

文章浏览阅读1k次。1.作用范围@ResponseBody主要使用在控制层(controller)的方法上,作用在方法和类上根据返回数据格式返回给客户端,没有写ResponseBody底层将方法封装为ModelAndView对象返回。2.返回格式如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。3、注意编码如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解修改编码格式,例如..._springboot responsebody注解作用

随便推点

ORA-01918: 用户 'SCOTT' 不存在 解决方法_?????: ora-01918: ?? 'scott' ???-程序员宅基地

文章浏览阅读7.6k次。SQL> alter user scott account unlock;alter user scott account unlock*第 1 行出现错误:ORA-01918: 用户 ‘SCOTT’ 不存在找到scott.sql 文件SQL> @D:\tudou\product\11.2.0\dbhome_1\RDBMS\ADMIN\scott.sqlSQL> conn..._?????: ora-01918: ?? 'scott' ???

Arduino grove 继电器_grove relay-程序员宅基地

文章浏览阅读288次。继电器 arduinoSIG -> D4VCC -> 5VGND -> GNDint relayPin = 4;void setup() { // put your setup code here, to run once: pinMode(relayPin, OUTPUT);}void loop() { //..._grove relay

ubuntu 搭建LAMP(Apache+PHP+MYSQL)开发环境-程序员宅基地

文章浏览阅读772次。(1)安装MYSQLsudo apt-get install mysql-server mysql-client(2)安装Apachesudo apt-get install apache2(3)安装PHPsudo apt-get install php5 libapache2-

three.js 源码注释(九十三)extras/core/Path.js_three.path.js-程序员宅基地

文章浏览阅读2.3k次。Path类创建2d的路径,包括点,线,和立方体,类似于HTML5 2D画布的API,curvePath类的扩展.Curve2维向量数组_three.path.js

rk3399下iic驱动方式一 -----Bus-devices-driver_iicrk-程序员宅基地

文章浏览阅读2k次。先简要说明一下东西, 板子是rk3399的板子,跑的安卓系统,安卓7.1,由于板载一块音频编解码芯片,正好可以支持iic接口,于是就尝试读取他的Device ID 0x6281 寄存器地址0xff,内核文档下kernel\Documentation\iic目录下有iic相关的文档说明该内核版本下相对上一版本(iic的版本)改动的说明,该目录下upgrading-clients文件中有说明,U..._iicrk

python实现大文件切片及组装_python切片文件组合-程序员宅基地

文章浏览阅读253次。有助于实现文件切片传输,断点续传等。_python切片文件组合

推荐文章

热门文章

相关标签