更新文件上传逻辑

master
土豆兄弟 4 years ago
parent 6bd3e51abd
commit ea5f31acdb

@ -86,11 +86,11 @@
<artifactId>oshi-core</artifactId> <artifactId>oshi-core</artifactId>
<version>5.0.1</version> <version>5.0.1</version>
</dependency> </dependency>
<dependency> <!--<dependency>-->
<groupId>com.google.guava</groupId> <!--<groupId>com.google.guava</groupId>-->
<artifactId>guava-parent</artifactId> <!--<artifactId>guava-parent</artifactId>-->
<version>23.0</version> <!--<version>23.0</version>-->
</dependency> <!--</dependency>-->
</dependencies> </dependencies>
<!-- 打包 --> <!-- 打包 -->

@ -133,7 +133,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 所有类型的接口都放行 // 所有类型的接口都放行
.antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll() .antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll()
// 所有请求都需要认证 // 所有请求都需要认证
.anyRequest().authenticated() // .anyRequest().authenticated()
.and().apply(securityConfigurerAdapter()); .and().apply(securityConfigurerAdapter());
} }

@ -1,11 +1,21 @@
package me.zhengjie.modules.upload.consts; package me.zhengjie.modules.upload.consts;
import org.springframework.beans.factory.annotation.Value;
/** /**
* *
*/ */
public class SysConst { public class SysConst {
// Test相关的 - start
// 远程服务器的相关配置 // 远程服务器的相关配置
// public static final String LOCAL_HOST = "localhost";
//
// public static final String LOCAL_DIR = "C:\\Users\\Administrator\\Desktop\\trans\\";
// Test相关的 - end
public static final String REMOTE_TRANS_HOST = "47.110.11.213"; public static final String REMOTE_TRANS_HOST = "47.110.11.213";
public static final Integer REMOTE_TRANS_PORT = 22; public static final Integer REMOTE_TRANS_PORT = 22;
@ -14,11 +24,27 @@ public class SysConst {
public static final String REMOTE_TRANS_SSH_PW = "yuyou@ECS2020"; public static final String REMOTE_TRANS_SSH_PW = "yuyou@ECS2020";
public static final String REMOTE_TRANS_DIR_PATH = "/home"; /**
* SFTP
*/
public static final String REMOTE_TRANS_DIR_PATH = "/home/";
// fixme 以后改成rpc调用的地址 // fixme 以后改成rpc调用的地址
public static final String REMOTE_UPDATE_ADDR = "http://116.62.197.152:8000/api/"; public static final String REMOTE_UPDATE_ADDR = "http://116.62.197.152:8000/api/remoteRecord/remote/rec";
// 测试内容临时定义 // 测试内容临时定义
public static final String TEST_USER_NAME = "测试用户"; public static final String TEST_USER_NAME = "测试用户";
// 系统开发,上线环境下进行关闭 - DEBUG开关 - 默认是打开的
public static Boolean sysDebug = true;
/**
* 使Set
*
* @param debug debug
*/
@Value(value = "${sys.debug}")
public static void setUrl(Boolean debug) {
SysConst.sysDebug = debug;
}
} }

@ -1,10 +1,18 @@
package me.zhengjie.modules.upload.consts; package me.zhengjie.modules.upload.consts;
import java.util.Collections;
import java.util.List;
/** /**
* *
*/ */
public class UploadFileConst { public class UploadFileConst {
/**
* -
*/
public static final List<String> WHITE_LIST = Collections.singletonList("admin");
/** /**
* ext - * ext -
*/ */

@ -15,14 +15,14 @@
*/ */
package me.zhengjie.modules.upload.domain; package me.zhengjie.modules.upload.domain;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.*;
import java.sql.Timestamp;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
/** /**
* @website https://el-admin.vip * @website https://el-admin.vip
@ -45,9 +45,16 @@ public class UploadFile implements Serializable {
@ApiModelProperty(value = "上传日期") @ApiModelProperty(value = "上传日期")
private Timestamp uploadTime; private Timestamp uploadTime;
/**
* ps,
*/
@Column(name = "upload_file_task_name")
@ApiModelProperty(value = "上传任务名称")
private String uploadFileTaskName;
@Column(name = "operation") @Column(name = "operation")
@ApiModelProperty(value = "操作人") @ApiModelProperty(value = "操作人")
private String opration; private String operation;
@Column(name = "file_count") @Column(name = "file_count")
@ApiModelProperty(value = "文件解析总数") @ApiModelProperty(value = "文件解析总数")
@ -61,7 +68,7 @@ public class UploadFile implements Serializable {
@ApiModelProperty(value = "上传状态") @ApiModelProperty(value = "上传状态")
private Integer uploadTag; private Integer uploadTag;
@Column(name = "lcoal_save_path") @Column(name = "local_save_path")
@ApiModelProperty(value = "文件上传保存路径") @ApiModelProperty(value = "文件上传保存路径")
private String localSavePath; private String localSavePath;

@ -15,6 +15,10 @@
*/ */
package me.zhengjie.modules.upload.rest; package me.zhengjie.modules.upload.rest;
import cn.hutool.core.collection.CollectionUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.annotation.AnonymousAccess; import me.zhengjie.annotation.AnonymousAccess;
import me.zhengjie.annotation.Log; import me.zhengjie.annotation.Log;
@ -25,20 +29,22 @@ import me.zhengjie.modules.upload.service.UploadFileService;
import me.zhengjie.modules.upload.service.dto.UploadFileDto; import me.zhengjie.modules.upload.service.dto.UploadFileDto;
import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria; import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
import me.zhengjie.modules.upload.task.SaveToFileTask; import me.zhengjie.modules.upload.task.SaveToFileTask;
import me.zhengjie.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import javax.servlet.http.HttpServletResponse;
import static me.zhengjie.modules.upload.consts.UploadFileConst.FILE_PATH_SPLIT;
/** /**
* @website https://el-admin.vip * @website https://el-admin.vip
@ -106,13 +112,30 @@ public class UploadFileController {
@ApiOperation("上传并加密任务") @ApiOperation("上传并加密任务")
@PostMapping(value = "/sendTask") @PostMapping(value = "/sendTask")
@AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解 @AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解
public ResponseEntity<Object> sendTask(@RequestParam(value = "files") MultipartFile[] files) { public ResponseEntity<Object> sendTask(@RequestParam(value = "files", required = false) MultipartFile[] files, @RequestParam(value = "taskName") String taskName ) {
// 任务名称检验,为必填参数,且不能重复
if (StringUtils.isNotBlank(taskName)){
// modify by x bug fix on POSTMAN request
if (StringUtils.contains(taskName, FILE_PATH_SPLIT)){
taskName = taskName.substring(0, taskName.length()-1);
}
UploadFileQueryCriteria criteria = new UploadFileQueryCriteria();
criteria.setUploadFileTaskName(taskName);
List<UploadFileDto> uploadFileDtos = uploadFileService.queryAll(criteria);
if (CollectionUtil.isNotEmpty(uploadFileDtos)){
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.TASK_NAME_IS_EXIST), HttpStatus.OK);
}
}else {
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK);
}
// 校验上传是否有文件 // 校验上传是否有文件
if (files!= null && files.length<= 0){ if (files!= null && files.length<= 0){
return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_FILE_INPUT), HttpStatus.OK); return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_FILE_INPUT), HttpStatus.OK);
} }
// 生成本地文件 // 生成本地文件
UploadFileDto uploadFileDto = uploadFileService.encryptDataAndSaveToFile(files); UploadFileDto uploadFileDto = uploadFileService.encryptDataAndSaveToFile(files, taskName);
// 如果临时生成失败就修改状态为失败 // 如果临时生成失败就修改状态为失败
if (Objects.isNull(uploadFileDto)){ if (Objects.isNull(uploadFileDto)){

@ -21,10 +21,10 @@ import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/** /**
* @website https://el-admin.vip * @website https://el-admin.vip
@ -88,5 +88,5 @@ public interface UploadFileService {
* *
* @param files * @param files
*/ */
UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files); UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files, String taskName);
} }

@ -15,12 +15,10 @@
*/ */
package me.zhengjie.modules.upload.service.dto; package me.zhengjie.modules.upload.service.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import java.sql.Timestamp;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
/** /**
* @website https://el-admin.vip * @website https://el-admin.vip
@ -51,4 +49,7 @@ public class UploadFileDto implements Serializable {
/** 上传保存路径 */ /** 上传保存路径 */
private String localSavePath; private String localSavePath;
/** 上传的文件名称 **/
private String uploadFileTaskName;
} }

@ -16,9 +16,10 @@
package me.zhengjie.modules.upload.service.dto; package me.zhengjie.modules.upload.service.dto;
import lombok.Data; import lombok.Data;
import me.zhengjie.annotation.Query;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List; import java.util.List;
import me.zhengjie.annotation.Query;
/** /**
* @website https://el-admin.vip * @website https://el-admin.vip
@ -32,14 +33,17 @@ public class UploadFileQueryCriteria{
@Query @Query
private Long id; private Long id;
/** 模糊 */ /** 精确 */
@Query(type = Query.Type.INNER_LIKE) private String operation;
private String opration;
/** 精确 */ /** 精确 */
@Query @Query
private Integer uploadTag; private Integer uploadTag;
/** 精确 */
@Query
private String uploadFileTaskName;
/** BETWEEN */ /** BETWEEN */
@Query(type = Query.Type.BETWEEN) @Query(type = Query.Type.BETWEEN)
private List<Timestamp> uploadTime; private List<Timestamp> uploadTime;

@ -15,36 +15,34 @@
*/ */
package me.zhengjie.modules.upload.service.impl; package me.zhengjie.modules.upload.service.impl;
import java.io.File;
import java.nio.file.Paths;
import java.sql.Timestamp;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.system.OsInfo; import cn.hutool.system.OsInfo;
import cn.hutool.system.SystemUtil; import cn.hutool.system.SystemUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.modules.upload.consts.SysConst;
import me.zhengjie.modules.upload.domain.UploadFile; import me.zhengjie.modules.upload.domain.UploadFile;
import me.zhengjie.modules.upload.task.SaveToFileTask;
import me.zhengjie.utils.*;
import lombok.RequiredArgsConstructor;
import me.zhengjie.modules.upload.repository.UploadFileRepository; import me.zhengjie.modules.upload.repository.UploadFileRepository;
import me.zhengjie.modules.upload.service.UploadFileService; import me.zhengjie.modules.upload.service.UploadFileService;
import me.zhengjie.modules.upload.service.dto.UploadFileDto; import me.zhengjie.modules.upload.service.dto.UploadFileDto;
import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria; import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria;
import me.zhengjie.modules.upload.service.mapstruct.UploadFileMapper; import me.zhengjie.modules.upload.service.mapstruct.UploadFileMapper;
import org.springframework.beans.factory.annotation.Autowired; import me.zhengjie.utils.*;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.sql.Timestamp;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import static me.zhengjie.modules.upload.consts.SysConst.TEST_USER_NAME; import static me.zhengjie.modules.upload.consts.SysConst.TEST_USER_NAME;
import static me.zhengjie.modules.upload.consts.UploadFileConst.*; import static me.zhengjie.modules.upload.consts.UploadFileConst.*;
@ -92,10 +90,29 @@ public class UploadFileServiceImpl implements UploadFileService {
@Override @Override
public Map<String, Object> queryAll(UploadFileQueryCriteria criteria, Pageable pageable) { public Map<String, Object> queryAll(UploadFileQueryCriteria criteria, Pageable pageable) {
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
criteria = filterOfWriteList(criteria);
UploadFileQueryCriteria finalCriteria = criteria;
Page<UploadFile> page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, finalCriteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(uploadFileMapper::toDto)); return PageUtil.toPage(page.map(uploadFileMapper::toDto));
} }
/**
* ,,
*
* @param criteria
*
* @return
*/
private UploadFileQueryCriteria filterOfWriteList(UploadFileQueryCriteria criteria) {
if (!SysConst.sysDebug){
if (!CollectionUtil.contains(WHITE_LIST, SecurityUtils.getCurrentUsername())){
criteria.setOperation(SecurityUtils.getCurrentUsername());
}
}
return criteria;
}
@Override @Override
public List<UploadFileDto> queryAll(UploadFileQueryCriteria criteria) { public List<UploadFileDto> queryAll(UploadFileQueryCriteria criteria) {
return uploadFileMapper.toDto(uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); return uploadFileMapper.toDto(uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
@ -147,10 +164,10 @@ public class UploadFileServiceImpl implements UploadFileService {
} }
@Override @Override
public UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files) { public UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files, String taskName) {
// 1. 文件存储到本地 // 1. 文件存储到本地
long count = 0; // 统计总数 long count = 0; // 统计总数
String baseStr = RandomUtil.randomString(11) + File.separator; // 生成通用随机文件夹存放每次的文件 String baseStr = ""; // 生成通用随机文件夹存放每次的文件
StringBuilder pathBuilder = new StringBuilder(); StringBuilder pathBuilder = new StringBuilder();
for (MultipartFile file : files) { for (MultipartFile file : files) {
@ -161,13 +178,14 @@ public class UploadFileServiceImpl implements UploadFileService {
} }
String extName = FileUtil.extName(originalFilename); String extName = FileUtil.extName(originalFilename);
baseStr += baseStr + FileUtil.mainName(originalFilename); baseStr += FileUtil.mainName(originalFilename);
String eachFilePath = buildFileWritePath(baseStr, extName); String eachFilePath = buildFileWritePath(baseStr, extName);
try { try {
// 把文件保存到本地路径 // 把文件保存到本地路径
file.transferTo(Paths.get(eachFilePath)); file.transferTo(Paths.get(eachFilePath));
baseStr = "";
} catch (IOException e) { } catch (IOException e) {
log.error("============== [transferTo file fail, path is {} ] ==============", eachFilePath); log.error("============== [transferTo file fail, path is {} ] ==============", eachFilePath,e);
} }
// 统计行数 // 统计行数
List<String> tempList = FileUtil.readLines(eachFilePath, "UTF-8"); List<String> tempList = FileUtil.readLines(eachFilePath, "UTF-8");
@ -182,12 +200,16 @@ public class UploadFileServiceImpl implements UploadFileService {
// 2. 更新上传记录为正在上传,解析了有多少条 // 2. 更新上传记录为正在上传,解析了有多少条
UploadFile uploadFile = new UploadFile(); UploadFile uploadFile = new UploadFile();
uploadFile.setUploadFileTaskName(taskName);
uploadFile.setUploadTime(new Timestamp(new Date().getTime())); uploadFile.setUploadTime(new Timestamp(new Date().getTime()));
String currentUsername = SecurityUtils.getCurrentUsername(); String currentUsername;
if (StringUtils.isBlank(currentUsername)){ if (SysConst.sysDebug){
uploadFile.setOpration(TEST_USER_NAME);//fixme 这边补充一下需要的操作人 uploadFile.setOperation(TEST_USER_NAME);//fixme 这边测试环境补充一下需要的操作人
}else {
currentUsername = SecurityUtils.getCurrentUsername();
uploadFile.setOperation(currentUsername);
} }
uploadFile.setOpration(currentUsername);//fixme 这边补充一下需要的操作人
uploadFile.setFileCount(count); uploadFile.setFileCount(count);
uploadFile.setFileTransSuccessCount(0L); uploadFile.setFileTransSuccessCount(0L);
uploadFile.setUploadTag(DOING_TAG); uploadFile.setUploadTag(DOING_TAG);
@ -211,19 +233,26 @@ public class UploadFileServiceImpl implements UploadFileService {
// 定义的时间格式 // 定义的时间格式
String timeFormate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String timeFormate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String dirPath;
// 生成一个随机文件夹目录,方便整理和打包 // 生成一个随机文件夹目录,方便整理和打包
String filePath = RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName;
if (osInfo.isWindows()) { if (osInfo.isWindows()) {
FileUtil.mkdir(remoteLinkFileBasePathWindows + baseStr); dirPath = remoteLinkFileBasePathWindows + timeFormate + File.separator;
FileUtil.mkdir(new File(dirPath));
// 构建存储文件 // 构建存储文件
return remoteLinkFileBasePathWindows + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) +FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; return dirPath + filePath;
} else if (osInfo.isLinux()) { } else if (osInfo.isLinux()) {
FileUtil.mkdir(remoteLinkFileBasePathLinux + baseStr); dirPath = remoteLinkFileBasePathLinux + timeFormate + File.separator;
FileUtil.mkdir(new File(dirPath));
// 构建存储文件 // 构建存储文件
return remoteLinkFileBasePathLinux + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; return dirPath + filePath;
} else if (osInfo.isMac()) { } else if (osInfo.isMac()) {
FileUtil.mkdir(remoteLinkFileBasePathMac + baseStr); dirPath = remoteLinkFileBasePathMac + timeFormate + File.separator;
FileUtil.mkdir(new File(dirPath));
// 构建存储文件 // 构建存储文件
return remoteLinkFileBasePathMac + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; return dirPath + filePath;
} else { } else {
return ""; return "";
} }

@ -14,7 +14,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.jcraft.jsch.Session; import com.jcraft.jsch.Session;
import com.mchange.v2.beans.BeansUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.modules.upload.domain.UploadFile; import me.zhengjie.modules.upload.domain.UploadFile;
import me.zhengjie.modules.upload.service.UploadFileService; import me.zhengjie.modules.upload.service.UploadFileService;
@ -33,7 +32,6 @@ import org.springframework.context.annotation.Scope;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.beans.Beans;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -217,6 +215,7 @@ public class SaveToFileTask {
} else { } else {
count++; count++;
try { try {
// 重新发送前休眠3秒
Thread.sleep(3_0000); Thread.sleep(3_0000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("SaveToFileTask|batchSendToEncrypt sleep ERROR. message is", e.getMessage(), e); log.error("SaveToFileTask|batchSendToEncrypt sleep ERROR. message is", e.getMessage(), e);
@ -291,16 +290,25 @@ public class SaveToFileTask {
/** /**
* HTTPPost * HTTPPost
* *
* @param path * @param path
*
* @return * @return
*/ */
private boolean sendUpdatePostReq(String path, UploadFileDto uploadFileDto) { private boolean sendUpdatePostReq(String path, UploadFileDto uploadFileDto) {
// 构建发送参数 // 构建发送参数
SendRemoteUpdateJsonContent sendRemoteUpdateJsonContent = new SendRemoteUpdateJsonContent(); SendRemoteUpdateJsonContent sendRemoteUpdateJsonContent = new SendRemoteUpdateJsonContent();
BeanUtil.copyProperties(uploadFileDto, sendRemoteUpdateJsonContent); BeanUtil.copyProperties(uploadFileDto, sendRemoteUpdateJsonContent);
String fileFullName = FileUtil.getName(path);
if (StringUtils.isNotBlank(fileFullName)){
sendRemoteUpdateJsonContent.setSftpFilePath(REMOTE_TRANS_DIR_PATH + fileFullName);
}
sendRemoteUpdateJsonContent.setFileTransSuccessCount(uploadFileDto.getFileCount());
sendRemoteUpdateJsonContent.setUploadRemoteTaskName(uploadFileDto.getUploadFileTaskName());
// 转成Json字符串 // 转成Json字符串
String readySendJson = JSON.toJSONString(sendRemoteUpdateJsonContent); String readySendJson = JSON.toJSONString(sendRemoteUpdateJsonContent);
log.info("====== [SaveToFileTask|sendUpdatePostReq , readySendJson is {} ] ======", readySendJson);
// 发送请求 // 发送请求
HttpResponse httpResponse = HttpRequest HttpResponse httpResponse = HttpRequest
.post(REMOTE_UPDATE_ADDR) .post(REMOTE_UPDATE_ADDR)
@ -312,6 +320,8 @@ public class SaveToFileTask {
if (httpResponse.isOk() && httpResponse.body().contains("SUCCESS")){ if (httpResponse.isOk() && httpResponse.body().contains("SUCCESS")){
log.info("====== [success send upload record request! ]======"); log.info("====== [success send upload record request! ]======");
return Boolean.TRUE; return Boolean.TRUE;
}else {
log.error("====== [ SaveToFileTask|sendUpdatePostReq , send upload record request Fail! ]======");
} }
return Boolean.FALSE; return Boolean.FALSE;

@ -1,13 +1,10 @@
package me.zhengjie.modules.upload.task.model; package me.zhengjie.modules.upload.task.model;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.Column;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
@ -17,7 +14,7 @@ import java.sql.Timestamp;
public class SendRemoteUpdateJsonContent implements Serializable { public class SendRemoteUpdateJsonContent implements Serializable {
/** /**
* - * -
*/ */
@JSONField(name = "uploadTime") @JSONField(name = "uploadTime")
private Timestamp uploadTime; private Timestamp uploadTime;
@ -31,7 +28,7 @@ public class SendRemoteUpdateJsonContent implements Serializable {
/** /**
* *
*/ */
@JSONField(name = "file_trans_success_count") @JSONField(name = "fileTransSuccessCount")
private Long fileTransSuccessCount; private Long fileTransSuccessCount;
/** /**
@ -45,4 +42,18 @@ public class SendRemoteUpdateJsonContent implements Serializable {
*/ */
@JSONField(name = "localSavePath") @JSONField(name = "localSavePath")
private String localSavePath; private String localSavePath;
/**
* sftp
*/
@JSONField(name = "sftpFilePath")
private String sftpFilePath;
/**
* ,
*/
@JSONField(name = "uploadRemoteTaskName")
private String uploadRemoteTaskName;
} }

@ -119,3 +119,6 @@ save:
maxPoolSize: 16 maxPoolSize: 16
queueCapacity: 3 queueCapacity: 3
ThreadNamePrefix: SaveToFileTaskExecutor- ThreadNamePrefix: SaveToFileTaskExecutor-
# 切换系统环境相关的配置
sys:
debug: true

@ -120,3 +120,14 @@ file:
# 文件大小 /M # 文件大小 /M
maxSize: 100 maxSize: 100
avatarMaxSize: 5 avatarMaxSize: 5
# 线程池配置
save:
task:
thread_pool:
corePoolSize: 2
maxPoolSize: 16
queueCapacity: 3
ThreadNamePrefix: SaveToFileTaskExecutor-
# 切换系统环境相关的配置
sys:
debug: false

@ -0,0 +1,32 @@
package me.zhengjie;
import cn.hutool.core.util.RandomUtil;
import me.zhengjie.utils.FileUtil;
import org.junit.Test;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
public class DemoTest {
/**
*
*/
@Test
public void testMakeDemoNumFile(){
String baseStr = "130";
String randBaseStr = "0123456789";
Set<String> numberStrsSet = new HashSet<>(20_00000);
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 20_0000; j++) {
numberStrsSet.add(baseStr + RandomUtil.randomString(randBaseStr,8));
}
FileUtil.writeLines(numberStrsSet, new File("C:\\Users\\Administrator\\Desktop\\" + RandomUtil.randomString(4) + ".txt"),"UTF-8");
numberStrsSet = new HashSet<>(20_00000);
}
}
}

@ -1,10 +1,10 @@
package me.zhengjie; package me.zhengjie;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ftp.FtpConfig;
import cn.hutool.extra.ssh.JschUtil; import cn.hutool.extra.ssh.JschUtil;
import cn.hutool.extra.ssh.Sftp; import cn.hutool.extra.ssh.Sftp;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.jcraft.jsch.Session; import com.jcraft.jsch.Session;
import me.zhengjie.utils.DateUtil; import me.zhengjie.utils.DateUtil;
import me.zhengjie.utils.FileUtil; import me.zhengjie.utils.FileUtil;
@ -13,13 +13,10 @@ import org.junit.Test;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Arrays; import java.util.*;
import java.util.Date;
import java.util.List;
public class SimpleTest { public class SimpleTest {
@ -108,4 +105,27 @@ public class SimpleTest {
System.out.println(FileUtil.mainName(file)); System.out.println(FileUtil.mainName(file));
} }
@Test
public void testCreteFile() throws IOException {
String path = "C:\\Users\\Administrator\\Desktop\\aa\\bb\\";
// FileUtil.mkdir(new File(path));
//
// Files.createFile(Paths.get(path + "1.txt"));
FileUtil.file(new File("1.txt"),"aa", "bb");
}
@Test
public void testPOSTBug(){
Map<String, Object> map = new HashMap<>();
map.put("taskName","1");
HttpResponse httpResponse = HttpRequest
.post("localhost:8000/api/uploadFile/sendTask")
.form(map)
.execute();
}
} }

@ -1,15 +1,21 @@
package me.zhengjie; package me.zhengjie;
import me.zhengjie.modules.upload.service.dto.UploadFileDto;
import me.zhengjie.modules.upload.task.SaveToFileTask;
import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.SecurityUtils;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.sql.Timestamp;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringApplicationTest { public class SpringApplicationTest {
@Autowired
private SaveToFileTask saveToFileTask;
/** /**
* *
@ -18,4 +24,27 @@ public class SpringApplicationTest {
public void testGetName(){ public void testGetName(){
System.out.println(SecurityUtils.getCurrentUsername()); System.out.println(SecurityUtils.getCurrentUsername());
} }
/**
* -
*/
@Test
public void testRemoteRec(){
String path = "C:\\Users\\Administrator\\Desktop\\c76l.txt";
UploadFileDto uploadFileDto = new UploadFileDto();
uploadFileDto.setUploadTime(new Timestamp(new java.util.Date().getTime()));
uploadFileDto.setOperation("测试用户1");
uploadFileDto.setFileCount(1000000L);
uploadFileDto.setFileTransSuccessCount(999999L);
uploadFileDto.setUploadFileTaskName("测试任务1");
// System.out.println(saveToFileTask.sendUpdatePostReq(path, uploadFileDto));
}
@Test
public void testSFTPTrans(){
// saveToFileTask.transFileToOtherServer("C:\\Users\\Administrator\\Desktop\\c76l.txt");
}
} }

Loading…
Cancel
Save