Browse Source

feat: 文件本地存储

dev
wangqing 4 years ago
parent
commit
3b01902d68
  1. 31
      tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java
  2. 16
      tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageConfig.java
  3. 2
      tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java
  4. 2
      tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageService.java
  5. 49
      tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/localStorageService.java
  6. 7
      tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java

31
tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java

@ -4,14 +4,15 @@ import com.google.common.collect.Lists;
import com.tduck.cloud.api.web.interceptor.AuthorizationInterceptor;
import com.tduck.cloud.api.web.interceptor.NoRepeatSubmitInterceptor;
import com.tduck.cloud.api.web.resolver.LoginUserHandlerMethodArgumentResolver;
import com.tduck.cloud.storage.cloud.OssStorageConfig;
import com.tduck.cloud.storage.entity.enums.OssTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.*;
import java.io.File;
import java.util.List;
/**
@ -20,6 +21,9 @@ import java.util.List;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private OssStorageConfig storageConfig;
@Autowired
private AuthorizationInterceptor authorizationInterceptor;
@ -37,6 +41,25 @@ public class WebMvcConfig implements WebMvcConfigurer {
"/**/*.ttf");
/**
* 配置本地文件上传的虚拟路径和静态化的文件生成路径
* 备注这是一种图片上传访问图片的方法实际上也可以使用nginx反向代理访问图片
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (storageConfig.getOssType() == OssTypeEnum.LOCAL) {
// 文件上传
String uploadFolder = storageConfig.getUploadFolder();
uploadFolder = StringUtils.appendIfMissing(uploadFolder, File.separator);
registry.addResourceHandler(storageConfig.getAccessPathPattern())
.addResourceLocations("file:" + uploadFolder);
}
//这句不要忘了,否则项目默认静态资源映射会失效
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//所有路径都被拦截

16
tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageConfig.java

@ -21,7 +21,8 @@ public class OssStorageConfig {
/**
* oss 类型 参考ossconstant
* oss 类型
* 参考 OssTypeEnum.java
*/
private OssTypeEnum ossType;
@ -54,4 +55,17 @@ public class OssStorageConfig {
*/
private String domain;
/**
* 本地存储文件存放地址
*/
private String uploadFolder;
/**
* 本地存储文件访问路径
*/
private String accessPathPattern;
}

2
tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java

@ -25,6 +25,8 @@ public final class OssStorageFactory {
return new AliyunOssStorageService(config);
} else if (config.getOssType() == OssTypeEnum.UPYUN) {
return new UpyunStorageService(config);
}else if (config.getOssType() == OssTypeEnum.LOCAL) {
return new localStorageService(config);
}
return null;
}

2
tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageService.java

@ -22,7 +22,7 @@ public abstract class OssStorageService {
/**
* 文件上传
*
* @param file 文件 上传路径
* @param inputStream 文件 上传路径
* @param path
* @return
*/

49
tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/localStorageService.java

@ -0,0 +1,49 @@
package com.tduck.cloud.storage.cloud;
import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.InputStream;
/**
* @description: 本地文件存储
* @author: smalljop
* @create: 2018-10-18 14:01
*/
@Component
@Slf4j
public class localStorageService extends OssStorageService {
public localStorageService(OssStorageConfig config) {
this.config = config;
}
@Override
public String upload(InputStream inputStream, String path) {
File file = FileUtil.file(config.getUploadFolder() + File.separator + path);
//目录是否存在
if (!FileUtil.exist(file.getParent())) {
FileUtil.mkdir(file.getParent());
}
FileUtil.writeFromStream(inputStream, file);
return config.getDomain() + "/" + path;
}
@Override
public String upload(byte[] data, String path) {
File file = FileUtil.file(config.getUploadFolder() + File.separator + path);
//目录是否存在
if (!FileUtil.exist(file.getParent())) {
FileUtil.mkdir(file.getParent());
}
FileUtil.writeBytes(data, file);
return config.getDomain() + "/" + path;
}
@Override
public void delete(String path) {
FileUtil.del(config.getUploadFolder() + File.separator + path);
}
}

7
tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java

@ -24,7 +24,12 @@ public enum OssTypeEnum {
/**
* 又拍云
*/
UPYUN(2);
UPYUN(2),
/**
* 本地存储
*/
LOCAL(3);
@JsonCreator

Loading…
Cancel
Save