使用Grails存储图像,但不能在生产中存储外部CATALINA_HOME



我正在使用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)
}

相关内容

  • 没有找到相关文章

最新更新