我正在使用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目录位于与存储它/ var的tomcat的单独分区中),目录已创建,但文件从未存储过。
当我将目标目录放在CATALINA_HOME文件夹中时,一切正常。但这不是我想要做的情景。
答案 0 :(得分:0)
您说您的目标目录位于另一个分区上,因此可能在此分区上使用了另一个文件系统。
或者,如果您查看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)
}