diff --git a/pom.xml b/pom.xml index 12e3199a..ce8abf72 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ 3.0.3 5.7.17 3.4.3.4 + 3.6 diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index c7067c45..e5c2b14b 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -125,11 +125,20 @@ swagger-annotations + + + cn.hutool hutool-all ${hutool.version} + + + org.projectlombok + lombok + + diff --git a/ruoyi-modules/ruoyi-file/pom.xml b/ruoyi-modules/ruoyi-file/pom.xml index 349cfc91..9463b20e 100644 --- a/ruoyi-modules/ruoyi-file/pom.xml +++ b/ruoyi-modules/ruoyi-file/pom.xml @@ -16,56 +16,63 @@ - - + + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery - + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config - + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel - + org.springframework.boot spring-boot-starter-actuator - + com.github.tobato fastdfs-client - + io.minio minio ${minio.version} - + + + + commons-net + commons-net + ${commonsNet.version} + + com.ruoyi ruoyi-api-system - + com.ruoyi ruoyi-common-swagger - + @@ -84,5 +91,5 @@ - + \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/FtpProperties.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/FtpProperties.java new file mode 100644 index 00000000..74545d6a --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/FtpProperties.java @@ -0,0 +1,52 @@ +package com.ruoyi.file.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * ftp配置信息 + * @author xiejs + * @since 2022-01-24 + */ +@Component +@ConfigurationProperties(prefix = "ftp") +@Data +public class FtpProperties { + + /** + * 端口 + */ + private String port; + + /** + * 用户名 + */ + private String user; + + /** + * 密码 + */ + private String password; + + + /** + * ftp服务ip + */ + private String serverIp; + + /** + * ftp文件路径 + */ + private String path; + + /** + * 项目地址 + */ + private String domain; + + /** + * 前缀 + */ + private String prefix; +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java index 3bca6686..4cb15d02 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java @@ -1,12 +1,13 @@ package com.ruoyi.file.config; -import java.io.File; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import java.io.File; + /** * 通用映射配置 * @@ -27,12 +28,29 @@ public class ResourcesConfig implements WebMvcConfigurer @Value("${file.prefix}") public String localFilePrefix; + + /** + * ftp文件路径 + */ + @Value("${ftp.path}") + private String ftpPath; + + /** + * ftp资源映射路径 前缀 + */ + @Value("${ftp.prefix}") + public String ftpFilePrefix; + @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler(ftpFilePrefix + "/**") + .addResourceLocations("file:" + ftpPath + File.separator); /** 本地文件上传路径 */ registry.addResourceHandler(localFilePrefix + "/**") .addResourceLocations("file:" + localFilePath + File.separator); + + } /** diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FtpSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FtpSysFileServiceImpl.java new file mode 100644 index 00000000..e3a631c6 --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FtpSysFileServiceImpl.java @@ -0,0 +1,41 @@ +package com.ruoyi.file.service; + +import cn.hutool.core.date.DateUtil; +import com.ruoyi.file.config.FtpProperties; +import com.ruoyi.file.utils.FileUploadUtils; +import com.ruoyi.file.utils.FtpUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import org.springframework.web.multipart.MultipartFile; + +import java.util.UUID; + +/** + * FTP 文件存储 + * @author xiejs + * @since 2022-01-24 + */ +@Service +@Primary +public class FtpSysFileServiceImpl implements ISysFileService{ + + @Autowired + private FtpUtils ftpUtils; + @Autowired + private FtpProperties ftpProperties; + + @Override + public String uploadFile(MultipartFile file) throws Exception { + Assert.notNull(file, "file is null"); + String extension = FileUploadUtils.getExtension(file); + String url = ""; + String fileName = UUID.randomUUID() + "." + extension; + boolean uploadResult = ftpUtils.uploadFile(String.valueOf(DateUtil.thisYear()),fileName , file.getInputStream()); + if (uploadResult) { + url = ftpProperties.getDomain() + ftpProperties.getPrefix() +"/"+DateUtil.thisYear()+"/"+ fileName; + } + return url; + } +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java index c0e20681..f35a2711 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java @@ -1,17 +1,15 @@ package com.ruoyi.file.service; +import com.ruoyi.file.utils.FileUploadUtils; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import com.ruoyi.file.utils.FileUploadUtils; /** * 本地文件存储 * * @author ruoyi */ -@Primary @Service public class LocalSysFileServiceImpl implements ISysFileService { diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FtpUtils.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FtpUtils.java new file mode 100644 index 00000000..4b5ccd8b --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FtpUtils.java @@ -0,0 +1,118 @@ +package com.ruoyi.file.utils; + +import cn.hutool.extra.ftp.Ftp; +import com.ruoyi.file.config.FtpProperties; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPFile; +import org.apache.commons.net.ftp.FTPReply; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.List; + +/** + * ftp工具类 + * @author xjs + * @since 2022-01-24 16:49:40 + */ +@Component +public class FtpUtils { + + private Ftp ftp = null; + + private static final Logger logger = LoggerFactory.getLogger(FtpUtils.class); + public static String LOCAL_CHARSET = "GBK"; + + @Autowired + private FtpProperties ftpProperties; + + public Ftp instance() { + if (ftp != null) { + ftp.reconnectIfTimeout(); + } else { + String ftpServerIp = ftpProperties.getServerIp(); + String ftpServerAccount = ftpProperties.getUser(); + String ftpServerPassword = ftpProperties.getPassword(); + String ftpServerPort = ftpProperties.getPort(); + synchronized (this) { + if (StringUtils.isBlank(ftpServerPassword) || StringUtils.isBlank(ftpServerAccount)) { + ftp = new Ftp(ftpServerIp, Integer.parseInt(ftpServerPort)); + } else { + ftp = new Ftp(ftpServerIp, Integer.parseInt(ftpServerPort), ftpServerAccount, ftpServerPassword); + } + ftp.setBackToPwd(true); + logger.info("login ftp server with {}:{}@{}:{}", ftpServerIp, Integer.parseInt(ftpServerPort), ftpServerAccount, ftpServerPassword); + setClientCharacter(); + } + } + return ftp; + } + + + + private void setClientCharacter() { + FTPClient ftpClient = ftp.getClient(); + ftpClient.setControlKeepAliveTimeout(60); + try { + int command = ftpClient.sendCommand("OPTS UTF8", "ON"); + if (FTPReply.isPositiveCompletion(command)) { + LOCAL_CHARSET = "UTF-8"; + } + ftpClient.setControlEncoding(LOCAL_CHARSET); + } catch (Exception exception) { + throw new RuntimeException("获取ftp服务编码格式异常:", exception.getCause()); + } + } + + public boolean existFile(String filePath) { + return instance().existFile(filePath); + } + + public boolean delFile(String filePath) { + return instance().delFile(filePath); + } + + public boolean delDir(String dirPath) { + return instance().delDir(dirPath); + } + + public boolean mkDir(String dirPath) { + return instance().mkdir(dirPath); + } + + public List lsFiles(String dirPath) { + FTPFile[] ftpFiles = instance().lsFiles(dirPath); + return Arrays.asList(ftpFiles); + } + + public boolean uploadFile(String path, String fileName, File file) { + return instance().upload(path, fileName, file); + } + + public boolean uploadFile(String path, String fileName, InputStream inputStream) { + return instance().upload(path, fileName, inputStream); + } + + public void download(String path, String fileName, OutputStream outputStream) { + instance().download(path, fileName, outputStream); + } + + public boolean close() { + try { + if (ftp != null) { + ftp.close(); + } + return true; + } catch (Exception exception) { + logger.error("error close ftp: " + exception.getCause()); + return false; + } + } +} diff --git a/xjs-business/xjs-business-webmagic/pom.xml b/xjs-business/xjs-business-webmagic/pom.xml index f063335c..17a7c72f 100644 --- a/xjs-business/xjs-business-webmagic/pom.xml +++ b/xjs-business/xjs-business-webmagic/pom.xml @@ -8,6 +8,7 @@ 3.3.0 4.0.0 + 业务模块-爬虫模块 xjs-business-webmagic diff --git a/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/handler/MiHoYoRepoPageProcessor.java b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/handler/MiHoYoRepoPageProcessor.java new file mode 100644 index 00000000..4b7f4cd1 --- /dev/null +++ b/xjs-business/xjs-business-webmagic/src/main/java/com/xjs/handler/MiHoYoRepoPageProcessor.java @@ -0,0 +1,30 @@ +package com.xjs.handler; + +import us.codecraft.webmagic.Page; +import us.codecraft.webmagic.Site; +import us.codecraft.webmagic.processor.PageProcessor; + +/** + * 米哈游社区爬取资源 + * @author xiejs + * @since 2022-01-24 + */ +public class MiHoYoRepoPageProcessor implements PageProcessor { + + + private Site site = Site.me().setRetryTimes(3).setSleepTime(100); + + + @Override + public void process(Page page) { + + } + + @Override + public Site getSite() { + return site; + } + + + +}