我正在使用Grails 2.5.6将上传的图像存储到服务器上的文件夹中。
以下是我存储图像的代码
mpr.multiFileMap.file.each{fileData->
CommonsMultipartFile file = fileData
File convFile = new File(file.getOriginalFilename());
file.transferTo(convFile);
/** Processing File **/
File uploadedFile = new File("${directory}${generatedFileName}.${extension}")
convFile.renameTo(uploadedFile)
}
我在开发上运行没有问题(MacOSX High Sierra(但是当我在生产环境(Ubuntu 14.04 服务器(上部署时,我无法将文件保存在目录之外CATALINA_HOME。
我已经检查了目标目录的权限和所有权,但仍然创建了目录,但从未存储过该文件。
例如,我尝试将文件存储在/home/tomcat/目录上(/home 目录与存储它的 tomcat 位于单独的分区中,该目录已创建,但文件从未存储过。
当我将目标目录放在CATALINA_HOME文件夹中时,一切正常。但这不是我想要做的场景。
你说你的目标目录在另一个分区上,所以也许在这个分区上使用了另一个文件系统。
或者,如果您查看renameTo方法的javadoc,则说:
此方法行为的许多方面本质上是 与平台相关:重命名操作可能无法移动 文件从一个文件系统到另一个文件系统,它可能不是原子的,而且它 如果文件具有目标抽象路径名,则可能不会成功 已经存在。 应始终检查返回值以使 确保重命名操作成功。 ...
@return
true
当且仅当重命名成功时;false
否则
因此,我认为renameTo方法无法移动文件,不知道为什么,但您可以像这样重写代码:
mpr.multiFileMap.file.each{fileData->
CommonsMultipartFile file = fileData
File uploadedFile = new File("${directory}${generatedFileName}.${extension}")
// String originalFilename = file.getOriginalFilename()
// you can store originalFilename in database for example
if(!uploadedFile.getParentFile().exists()) {
uploadedFile.getParentFile().mkdirs()
// You can set permissions on the target directory if you desired, using PosixFilePermission
}
file.transferTo(uploadedFile)
}