Initial commit

This commit is contained in:
易焱
2019-07-30 18:14:32 +08:00
commit daa60cf523
1624 changed files with 90832 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="common" />
<orderEntry type="module" module-name="system" />
<orderEntry type="module" module-name="excel" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:4.0.0" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.18" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.26" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.17" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.16.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.3" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.3.9.Final" level="project" />
<orderEntry type="library" name="Maven: javax.persistence:javax.persistence-api:2.2" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.23.1-GA" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.12" level="project" />
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" name="Maven: org.jboss:jandex:2.0.5.Final" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.4.Final" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-orm:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.6.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework.boot:spring-boot-devtools:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.4" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.6.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.6.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:5.1.46" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.2" level="project" />
<orderEntry type="library" name="Maven: net.sf.ehcache:ehcache:2.10.5" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" />
<orderEntry type="library" name="Maven: org.jsoup:jsoup:1.11.3" level="project" />
</component>
</module>
+32
View File
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cwhelp.component</groupId>
<artifactId>fileUpload</artifactId>
<packaging>jar</packaging>
<name>组件:文件上传</name>
<parent>
<groupId>com.cwhelp</groupId>
<artifactId>component</artifactId>
<version>2.0.1</version>
</parent>
<dependencies>
<dependency>
<groupId>com.cwhelp</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.cwhelp.modules</groupId>
<artifactId>system</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,154 @@
package com.cwhelp.component.fileUpload;
import com.cwhelp.common.exception.ResultException;
import com.cwhelp.common.utils.SpringContextUtil;
import com.cwhelp.common.utils.ToolUtil;
import com.cwhelp.component.fileUpload.config.properties.UploadProjectProperties;
import com.cwhelp.component.fileUpload.enums.UploadResultEnum;
import com.cwhelp.modules.system.domain.Upload;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* 文件上传处理工具
* @author yan.y
*/
public class FileUpload {
/**
* 创建一个Upload实体对象
* @param multipartFile MultipartFile对象
* @param modulePath 文件模块路径
*/
public static Upload getFile(MultipartFile multipartFile, String modulePath){
if (multipartFile.getSize() == 0){
throw new ResultException(UploadResultEnum.NO_FILE_NULL);
}
Upload upload = new Upload();
upload.setMime(multipartFile.getContentType());
upload.setSize(multipartFile.getSize());
upload.setName(FileUpload.genFileName(multipartFile.getOriginalFilename()));
upload.setPath(getPathPattern() + modulePath + FileUpload.genDateMkdir("yyyyMMdd") + upload.getName());
return upload;
}
/**
* 判断文件是否为支持的格式
* @param multipartFile MultipartFile对象
* @param types 支持的文件类型数组
*/
public static boolean isContentType(MultipartFile multipartFile, String[] types){
List<String> typeList = Arrays.asList(types);
return typeList.contains(multipartFile.getContentType());
}
/**
* 获取文件上传保存路径
*/
public static String getUploadPath(){
UploadProjectProperties properties = SpringContextUtil.getBean(UploadProjectProperties.class);
return properties.getFilePath();
}
/**
* 获取文件上传目录的静态资源路径
*/
public static String getPathPattern(){
UploadProjectProperties properties = SpringContextUtil.getBean(UploadProjectProperties.class);
return properties.getStaticPath().replace("/**", "");
}
/**
* 生成随机且唯一的文件名
*/
public static String genFileName(String originalFilename){
String fileSuffix = ToolUtil.getFileSuffix(originalFilename);
return UUID.randomUUID().toString().replace("-", "") + fileSuffix;
}
/**
* 生成指定格式的目录名称(日期格式)
*/
public static String genDateMkdir(String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
return "/" + sdf.format(new Date()) + "/";
}
/**
* 获取目标文件对象
* @param upload 上传实体类
*/
public static File getDestFile(Upload upload) throws IOException {
// 创建保存文件对象
String path = upload.getPath().replace(getPathPattern(), "");
String filePath = getUploadPath() + path;
File dest = new File(filePath.replace("//", "/"));
if(!dest.exists()){
dest.getParentFile().mkdirs();
dest.createNewFile();
}
return dest;
}
/**
* 保存文件及获取文件MD5值和SHA1值
* @param multipartFile MultipartFile对象
* @param upload Upload
*/
public static void transferTo(MultipartFile multipartFile, Upload upload) throws IOException, NoSuchAlgorithmException {
byte[] buffer = new byte[4096];
MessageDigest md5 = MessageDigest.getInstance("MD5");
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
try (OutputStream fos = Files.newOutputStream(getDestFile(upload).toPath()); InputStream fis = multipartFile.getInputStream()) {
int len = 0;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
md5.update(buffer, 0, len);
sha1.update(buffer, 0, len);
}
fos.flush();
}
BigInteger MD5Bi = new BigInteger(1, md5.digest());
BigInteger SHA1Bi = new BigInteger(1, sha1.digest());
upload.setMd5(MD5Bi.toString(16));
upload.setSha1(SHA1Bi.toString(16));
}
/**
* 获取文件的SHA1值
*/
public static String getFileSHA1(MultipartFile multipartFile) {
if (multipartFile.getSize() == 0){
throw new ResultException(UploadResultEnum.NO_FILE_NULL);
}
byte[] buffer = new byte[4096];
try (InputStream fis = multipartFile.getInputStream()) {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
int len = 0;
while ((len = fis.read(buffer)) != -1) {
sha1.update(buffer, 0, len);
}
BigInteger SHA1Bi = new BigInteger(1, sha1.digest());
return SHA1Bi.toString(16);
} catch (IOException | NoSuchAlgorithmException e) {
return null;
}
}
}
@@ -0,0 +1,21 @@
package com.cwhelp.component.fileUpload.config;
import com.cwhelp.common.utils.SpringContextUtil;
import com.cwhelp.component.fileUpload.FileUpload;
import com.cwhelp.component.fileUpload.config.properties.UploadProjectProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author yan.y
*/
@Configuration
public class UploadFileConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
UploadProjectProperties properties = SpringContextUtil.getBean(UploadProjectProperties.class);
registry.addResourceHandler(properties.getStaticPath()).addResourceLocations("file:" + FileUpload.getUploadPath());
}
}
@@ -0,0 +1,27 @@
package com.cwhelp.component.fileUpload.config.properties;
import com.cwhelp.common.utils.ToolUtil;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 项目-文件上传配置项
* @author yan.y
*/
@Data
@Component
@ConfigurationProperties(prefix = "project.upload")
public class UploadProjectProperties {
// 上传文件路径
private String filePath;
// 上传文件静态访问路径
private String staticPath = "/upload/**";
public String getFilePath() {
if(filePath == null){
return ToolUtil.getProjectPath() + "/upload/";
}
return filePath;
}
}
@@ -0,0 +1,29 @@
package com.cwhelp.component.fileUpload.enums;
import com.cwhelp.common.exception.interfaces.ResultInterface;
import lombok.Getter;
/**
* 后台返回结果集枚举
* @author yan.y
*/
@Getter
public enum UploadResultEnum implements ResultInterface {
/**
* 文件操作
*/
NO_FILE_NULL(401, "文件不能为空"),
NO_FILE_TYPE(402, "不支持该文件类型"),
;
private Integer code;
private String message;
UploadResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
@@ -0,0 +1,23 @@
{
"groups": [
{
"name": "project.upload",
"type": "com.cwhelp.component.fileUpload.config.properties.UploadProjectProperties",
"sourceType": "com.cwhelp.component.fileUpload.config.properties.UploadProjectProperties"
}
],
"properties": [
{
"name": "project.upload.file-path",
"type": "java.lang.String",
"sourceType": "com.cwhelp.component.fileUpload.config.properties.UploadProjectProperties"
},
{
"name": "project.upload.static-path",
"type": "java.lang.String",
"sourceType": "com.cwhelp.component.fileUpload.config.properties.UploadProjectProperties",
"defaultValue": "\/upload\/**"
}
],
"hints": []
}