package com.stylefeng.guns.config.properties;
import com.stylefeng.guns.core.util.ToolUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import java.io.File;
import java.io.FileNotFoundException;
import static com.stylefeng.guns.core.util.ToolUtil.getTempPath;
import static com.stylefeng.guns.core.util.ToolUtil.isEmpty;
@Component
@ConfigurationProperties(prefix = GunsProperties.PREFIX)
public class GunsProperties {
public static final String PREFIX = "guns";
private Boolean kaptchaOpen = false;
private Boolean swaggerOpen = false;
@Value("${guns.file-upload-path}")
private String fileUploadPath;
private Boolean haveCreatePath = false;
private Boolean springSessionOpen = false;
/**
* session 失效时间(默认为30分钟 单位:秒)
*/
private Integer sessionInvalidateTime = 30 * 60;
/**
* session 验证失效时间(默认为15分钟 单位:秒)
*/
private Integer sessionValidationInterval = 15 * 60;
public String getFileUploadPath() throws FileNotFoundException {
String fileUploadPath_New=null;
if (ToolUtil.isWinOs()){
fileUploadPath_New= ToolUtil.getWebRootPath(fileUploadPath);
}else {
//获取跟目录
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) path = new File("");
System.out.println("path:"+path.getAbsolutePath());
//如果上传目录为/static/images/upload/,则可以如下获取:
File upload = new File(path.getAbsolutePath(),"static/upload/img");
if(!upload.exists()) upload.mkdirs();
System.out.println("upload url:"+upload.getAbsolutePath());
fileUploadPath_New =upload.getAbsolutePath();
}
//如果没有写文件上传路径,保存到临时目录
if (isEmpty(fileUploadPath_New)) {
return getTempPath();
} else {
//判断有没有结尾符,没有得加上
if (!fileUploadPath_New.endsWith(File.separator)) {
//fileUploadPath_New = fileUploadPath_New + File.separator;
fileUploadPath_New = fileUploadPath_New + '/';
}
//判断目录存不存在,不存在得加上
if (!haveCreatePath) {
File file = new File(fileUploadPath_New);
file.mkdirs();
haveCreatePath = true;
}
return fileUploadPath_New;
}
}
public void setFileUploadPath(String fileUploadPath) {
this.fileUploadPath = fileUploadPath;
}
public Boolean getKaptchaOpen() {
return kaptchaOpen;
}
public void setKaptchaOpen(Boolean kaptchaOpen) {
this.kaptchaOpen = kaptchaOpen;
}
public Boolean getSwaggerOpen() {
return swaggerOpen;
}
public void setSwaggerOpen(Boolean swaggerOpen) {
this.swaggerOpen = swaggerOpen;
}
public Boolean getSpringSessionOpen() {
return springSessionOpen;
}
public void setSpringSessionOpen(Boolean springSessionOpen) {
this.springSessionOpen = springSessionOpen;
}
public Integer getSessionInvalidateTime() {
return sessionInvalidateTime;
}
public void setSessionInvalidateTime(Integer sessionInvalidateTime) {
this.sessionInvalidateTime = sessionInvalidateTime;
}
public Integer getSessionValidationInterval() {
return sessionValidationInterval;
}
public void setSessionValidationInterval(Integer sessionValidationInterval) {
this.sessionValidationInterval = sessionValidationInterval;
}
}
另外使用以上代码需要注意,因为以jar包发布时,我们存储的路径是与jar包同级的static目录,因此我们需要在jar包目录的application.properties配置文件中设置静态资源路径,如下所示==============================
#设置静态资源路径,多个以逗号分隔
spring.resources.static-locations=classpath:static/,file:static/
文件上传至jar包同级目录下,采用虚拟路径映射解决访问地址问题
@Configuration
public class LoginConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
try {
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) {
path = new File("");
}
System.out.println("进入映射"+path.getAbsolutePath()+"========"+System.currentTimeMillis());
//注意前面要加file,不然是访问不了的
registry.addResourceHandler("/upload/**").addResourceLocations("file:upload/");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
映射的服务器地址只需要填写同级目录的地址即可