资讯详情

Golang创建文件权限问题解决方法

Golang解决文件权限问题的方法

前言:

最近在写一个关于excel其中一个功能需要每天上传excel表格总结到当天的文件夹中,这需要时间来判断,然后每天创建相应的文件夹。在本地实现此功能后,我上传了我的代码,但在线存在问题。每次导入文件后,都没有生成相应的文件夹。在调查了配置、代码等一系列问题后,发现问题出现在创建权限上。

1.分析

  • 代码在本地运行,文件夹不涉及linux系统权限问题,所以我们的程序可以正常运行,但当我们在服务器上运行我们的程序时,情况就不同了,这将涉及到linux文件权限。

  • 原因是需要打开文件夹,因此必须有当前文件夹的执行权 **x**,Linux 文件夹也是一个特殊的文件

  • 如果使用 **os.MkdirAll** 创建文件夹时,必须基于文件夹所有者 x 执行权和 w 写权限,为什么需要写权限,可以通过 vim 打开文件夹,可以看到文件夹中的信息(记住,文件夹也是文件)。例如,我通过文件夹 vim 打开信息:

" ============================================================================ " Netrw Directory Listing                                        (netrw v155) "   /home/g10guang/Templates/blog "   Sorted by      name "   Sort sequence: [\/]$,\<core\%(\.\d\ \)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.ba "   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:special " ==============================================================================
../                                                                                                      
./
.git/
.sass-cache/
_posts/
_site/
g10guang.github.io/
.gitignore
.gitmodules
404.html
Gemfile
Gemfile.lock
_config.yml
about.md
index.md
  • 文件夹中记录着里面有哪些文件以及文件夹,其中 **xxx/****/** 结尾的是文件夹,其他的是文件,所以在文件夹中创建一个文件夹需要改变文件夹信息,需要有写文件夹的权限

2.创建指定权限文件方法

1.方法一:

改变 **umask** 后再创建文件,其后再把 **umask** 改为原来的 umask

import (
"os"
"fmt"
"syscall"
)

func main() { 
        
mask := syscall.Umask(0)    // 改为 0000 八进制
defer syscall.Umask(mask)   // 改为原来的 umask
err := os.MkdirAll("test/test1/test2", 0766)
if err != nil { 
        
       fmt.Println(err)
   }
}

2.方法二

先创建文件,然后再改变文件的权限

//创建文件并给予权限
err := os.MkdirAll("uploads/import_excel/", 0777)
		if err != nil { 
        
			fmt.Println("创建目录失败")
			err := os.Chmod("uploads/", 0777)
			if err != nil { 
        
				fmt.Println("改变uploads权限失败")
			}
			err = os.Chmod("uploads/import_excel/", 0777)
			if err != nil { 
        
				fmt.Println("改变import_excel权限失败")
			}
		}

golang 还不支持递归更改多个文件夹的权限,所有需要一个一个调用。

标签: 160v155j安规电容器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台