2 Commits

Author SHA1 Message Date
jsowell
ec84582a98 update上传固件 2026-06-03 16:33:05 +08:00
jsowell
38262365e5 bugfix firmware path update 2026-06-03 14:19:02 +08:00
2 changed files with 27 additions and 6 deletions

View File

@@ -18,6 +18,7 @@ import javax.annotation.PostConstruct;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
@Slf4j @Slf4j
@Component @Component
@@ -47,11 +48,12 @@ public class FtpUtils {
public static String upLoad(String baseDir, MultipartFile file) throws Exception { public static String upLoad(String baseDir, MultipartFile file) throws Exception {
FTPClient ftp = new FTPClient(); FTPClient ftp = new FTPClient();
baseDir = "/"; baseDir = "/";
String fileName = null;
try { try {
/** 1. 检查文件大小和扩展名是否符合要求*/ /** 1. 检查文件大小和扩展名是否符合要求*/
assertFile(file); assertFile(file);
/** 2. 产生新的文件名,目的使得文件名统一为英文字符加数字;fileName包含文件后缀名*/ /** 2. 产生新的文件名,目的使得文件名统一为英文字符加数字;fileName包含文件后缀名*/
String fileName = reBuildFileName(file); fileName = reBuildFileName(file);
/** 3. 连接ftp服务器*/ /** 3. 连接ftp服务器*/
String ip = IpUtils.getIpFormDomainName(ftpConfig.getIp()); String ip = IpUtils.getIpFormDomainName(ftpConfig.getIp());
ftp.connect(ip, ftpConfig.getPort()); ftp.connect(ip, ftpConfig.getPort());
@@ -61,6 +63,7 @@ public class FtpUtils {
} else { } else {
log.info("FTP登录失败"); log.info("FTP登录失败");
} }
ftp.setRemoteVerificationEnabled(false);
ftp.enterLocalPassiveMode(); // 设置为被动模式 ftp.enterLocalPassiveMode(); // 设置为被动模式
log.info("ftp连接信息, ip:{}, port:{}, 连接信息:{}", ip, ftpConfig.getPort(), ftp.getStatus()); log.info("ftp连接信息, ip:{}, port:{}, 连接信息:{}", ip, ftpConfig.getPort(), ftp.getStatus());
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
@@ -90,11 +93,23 @@ public class FtpUtils {
// 设置缓冲区大小 // 设置缓冲区大小
ftp.setBufferSize(3072); ftp.setBufferSize(3072);
// 上传文件 // 上传文件
ftp.storeFile(fileName, file.getInputStream()); try (InputStream inputStream = file.getInputStream()) {
boolean uploaded = ftp.storeFile(fileName, inputStream);
if (!uploaded) {
throw new IOException("FTP上传失败响应信息" + ftp.getReplyString());
}
}
// 登出服务器 // 登出服务器
ftp.logout(); ftp.logout();
return baseDir + "/" + fileName; return baseDir + "/" + fileName;
} catch (Exception e) { } catch (Exception e) {
if (StringUtils.isNotEmpty(fileName) && ftp.isConnected()) {
try {
ftp.deleteFile(fileName);
} catch (IOException deleteException) {
log.warn("删除FTP上传失败残留文件异常, fileName:{}", fileName, deleteException);
}
}
throw new Exception(e.getMessage(), e); throw new Exception(e.getMessage(), e);
} finally { } finally {
/** 关闭*/ /** 关闭*/

View File

@@ -77,10 +77,7 @@ public class PileFirmwareInfoServiceImpl implements PileFirmwareInfoService {
@Override @Override
public int insertPileFirmwareInfo(PileFirmwareInfo pileFirmwareInfo) { public int insertPileFirmwareInfo(PileFirmwareInfo pileFirmwareInfo) {
// pileFirmwareInfo.setCreateTime(DateUtils.getNowDate()); // pileFirmwareInfo.setCreateTime(DateUtils.getNowDate());
String filePath = pileFirmwareInfo.getFilePath(); pileFirmwareInfo.setFilePath(normalizeFilePath(pileFirmwareInfo.getFilePath()));
// 两个斜杠 留一个
filePath = filePath.replaceAll("//", "/");
pileFirmwareInfo.setFilePath(filePath);
return pileFirmwareInfoMapper.insertPileFirmwareInfo(pileFirmwareInfo); return pileFirmwareInfoMapper.insertPileFirmwareInfo(pileFirmwareInfo);
} }
@@ -99,10 +96,19 @@ public class PileFirmwareInfoServiceImpl implements PileFirmwareInfoService {
*/ */
@Override @Override
public int updatePileFirmwareInfo(PileFirmwareInfo pileFirmwareInfo) { public int updatePileFirmwareInfo(PileFirmwareInfo pileFirmwareInfo) {
pileFirmwareInfo.setFilePath(normalizeFilePath(pileFirmwareInfo.getFilePath()));
pileFirmwareInfo.setUpdateTime(DateUtils.getNowDate()); pileFirmwareInfo.setUpdateTime(DateUtils.getNowDate());
return pileFirmwareInfoMapper.updatePileFirmwareInfo(pileFirmwareInfo); return pileFirmwareInfoMapper.updatePileFirmwareInfo(pileFirmwareInfo);
} }
private String normalizeFilePath(String filePath) {
if (StringUtils.isBlank(filePath)) {
return filePath;
}
// 两个斜杠留一个,兼容固件上传接口返回的相对路径。
return filePath.replaceAll("//", "/");
}
/** /**
* 批量删除充电桩固件信息 * 批量删除充电桩固件信息
* *