在java中更改文件权限

pxq42qpu  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(142)

我想把MultipartFile转换成File,并把它上传到我的ec2示例的指定目录。

private fun convertMultiPartFileToFile(multipartFile: MultipartFile, name: String): File? {
        val file = multipartFile.originalFilename?.let { File(it) }
        try {
            log.info { file?.canWrite() } // logs 'false'
            log.info { file?.canExecute() } // logs 'false'
            file?.setExecutable(true) // still 'false'
            file?.setWritable(true) // still 'false'

            file.let {
                if (file != null) {
                    FileOutputStream(file).use { outputStream -> outputStream.write(multipartFile.bytes) }
                }
            }
        } catch (e: IOException) {
            throw RuntimeException(e)
        }

        return file
    }

它在本地工作,但是当我在ec2示例上尝试时,出现了错误

java.lang.RuntimeException: java.io.FileNotFoundException: file.png (Permission denied)

我想是因为我没有写指定文件的权限,file?.setWritable(file)file?.setExecutable(true)返回false怎么解决,我用java -jar path/to/jar运行jar
setWritable方法文档中说

* @return  {@code true} if and only if the operation succeeded.  The
     * operation will fail if the user does not have permission to
     * change the access permissions of this abstract pathname.

那么如何获得对这个抽象路径名的访问权限呢?

f87krz0w

f87krz0w1#

MultipartFile不代表文件系统上的文件,而File代表系统上的本地文件,它们只是上传的数据。
因此,multipartFile.originalFilename不会给予系统上任何文件的名称(除非“随机”存在同名文件),而是提供用户上传的文件(在其系统上)的名称。
如果您想将MultipartFile作为File访问,首先需要将其保存为:

val file=File("what/ever/file/you.want")//in the directory you want to upload it to
multipartFile.transferTo(file)
//it is now stored in file

这会将文件复制到您的系统。

相关问题