今天做功能碰到了一个情况: 需要在程序中自动在linux的根目录创建一个路径,并往里存图片。
开始只是简单的将图片移动到指定的路径中,竟然无法访问。竟分析后发现是因为文件夹和文件的权限不够导致。
以下代码是将文件夹和文件的权限进行修改的:
/**
* 图片上传
* @param file
* @param filename
* @throws IllegalStateException
* @throws IOException
* Seven
* 2018年1月22日 下午4:13:48
*/
@Override
public void storeFile(File file, String filename) throws IllegalStateException, IOException {
File dest = new File(pathResolver.getPath(filename, prefix));
FileUtils.moveFile(file, dest);
//设置权限
Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ); //设置所有者的读取权限
perms.add(PosixFilePermission.OWNER_WRITE); //设置所有者的写权限
perms.add(PosixFilePermission.OWNER_EXECUTE); //设置所有者的执行权限
perms.add(PosixFilePermission.GROUP_READ); //设置组的读取权限
perms.add(PosixFilePermission.GROUP_EXECUTE); //设置组的读取权限
perms.add(PosixFilePermission.OTHERS_READ); //设置其他的读取权限
perms.add(PosixFilePermission.OTHERS_EXECUTE); //设置其他的读取权限
try {
//设置文件和文件夹的权限
Path pathParent = Paths.get(dest.getParentFile().getAbsolutePath());
Path pathDest = Paths.get(dest.getAbsolutePath());
Files.setPosixFilePermissions(pathParent, perms); //修改文件夹路径的权限
Files.setPosixFilePermissions(pathDest, perms); //修改图片文件的权限
} catch (Exception e) {
logger.info(e.getMessage());
}
}