我想把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
运行jarsetWritable
方法文档中说
* @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.
那么如何获得对这个抽象路径名的访问权限呢?
1条答案
按热度按时间f87krz0w1#
MultipartFile
不代表文件系统上的文件,而File
代表系统上的本地文件,它们只是上传的数据。因此,
multipartFile.originalFilename
不会给予系统上任何文件的名称(除非“随机”存在同名文件),而是提供用户上传的文件(在其系统上)的名称。如果您想将
MultipartFile
作为File
访问,首先需要将其保存为:这会将文件复制到您的系统。