All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.featherfly.common.storage.LocalDirStorage Maven / Gradle / Ivy


package cn.featherfly.common.storage;

import java.io.File;
import java.net.URL;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.featherfly.common.exception.AssertStandardSys;
import cn.featherfly.common.io.FileUtils;
import cn.featherfly.common.io.file.RenamePolicy;
import cn.featherfly.common.lang.LangUtils;
import cn.featherfly.common.lang.UriUtils;

/**
 * 

* 本地目录存储对象 *

*

* copyright featherfly 2010-2020, all rights reserved. *

* * @param 存储的对象类型 * @author 钟冀 */ public abstract class LocalDirStorage implements Storage{ /** * 日志对象 */ protected final Logger logger = LoggerFactory .getLogger(this.getClass()); /** */ public LocalDirStorage() { setBaseDirDefault(); } // ******************************************************************** // protected method // ******************************************************************** /** *

* 创建扩展目录 *

* @return 扩展目录 */ protected abstract String getExtDir(); /** *

* 获取文件存储后的唯一标示 *

* @param targetFile 存储后的文件 * @return 文件存储后的唯一标示 */ protected String getId(File targetFile) { String extDir = getExtDir(); if (LangUtils.isEmpty(extDir)) { return targetFile.getName(); } else { return extDir + "/" + targetFile.getName(); } } /** *

* 创建实际存储的文件 *

* @param fileName 原始文件名称 * @return 实际存储的文件 */ protected File createTargetFile(String fileName) { String extDir = getExtDir(); File file = new File(UriUtils.linkUri( createTargetDir(extDir).getAbsolutePath(), rename(fileName)));; logger.debug("文件存储目标位置:{}", file.getAbsolutePath()); FileUtils.createDirectory(file.getParentFile()); return file; } /** *

* 创建相对路径对象 *

* @return 相对路径对象 */ protected File createRelativeDir() { AssertStandardSys.isNotEmpty(getBaseDir(), "基础目录不能为空"); File file = null; // 设置基础目录 String finalDir = getBaseDir(); // 连接相对目录 String relativeDir = getRelativeDir(); if (LangUtils.isNotEmpty(relativeDir)) { finalDir = UriUtils.linkUri(finalDir, relativeDir); } file = new File(finalDir); logger.debug("文件存储相对目录:{}", file.getAbsolutePath()); FileUtils.createDirectory(file); return file; } // ******************************************************************** // private method // ******************************************************************** /* *

* 创建文件的实际存储目录 *

* @return 文件的实际存储目录 */ private File createTargetDir(String extDir) { File file = createRelativeDir(); String finalDir = file.getAbsolutePath(); // 连接扩展目录 if (LangUtils.isNotEmpty(extDir)) { finalDir = UriUtils.linkUri(finalDir, extDir); } file = new File(finalDir); logger.debug("文件存储目标目录:{}", file.getAbsolutePath()); FileUtils.createDirectory(file); return file; } /* *

* 文件重命名 *

* @param fileName 文件名 * @return 重命名后的文件名 */ private String rename(String fileName) { if (renamePolicy != null) { logger.debug("重命名策略为:{}", renamePolicy.getClass().getName()); return renamePolicy.rename(fileName); } else { logger.debug("重命名策略为空,使用原始文件名:{}" + fileName); return fileName; } } private void setBaseDirDefault() { if (LangUtils.isEmpty(baseDir)) { URL resource = this.getClass().getResource("/"); if (resource == null) { resource = Thread.currentThread().getContextClassLoader().getResource("."); } baseDir = FileUtils.getRootDir(new File(resource.getPath())).getAbsolutePath(); logger.debug("baseDir为空,使用根目录:{}", baseDir); } } // ******************************************************************** // property // ******************************************************************** /** * 基础目录 */ private String baseDir; /** * 相对路径 */ private String relativeDir; /** * 文件名重命名策略 */ private RenamePolicy renamePolicy; /** * 返回baseDir * @return baseDir */ public String getBaseDir() { return baseDir; } /** * 设置baseDir * @param baseDir baseDir */ public void setBaseDir(String baseDir) { this.baseDir = baseDir; } /** * 返回relativeDir * @return relativeDir */ public String getRelativeDir() { return relativeDir; } /** * 设置relativeDir * @param relativeDir relativeDir */ public void setRelativeDir(String relativeDir) { this.relativeDir = relativeDir; } /** * 返回renamePolicy * @return renamePolicy */ public RenamePolicy getRenamePolicy() { return renamePolicy; } /** * 设置renamePolicy * @param renamePolicy renamePolicy */ public void setRenamePolicy(RenamePolicy renamePolicy) { this.renamePolicy = renamePolicy; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy