Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManagerImpl.java =================================================================== diff -u -r36896 -r37158 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManagerImpl.java (.../CommonFileManagerImpl.java) (revision 36896) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManagerImpl.java (.../CommonFileManagerImpl.java) (revision 37158) @@ -35,10 +35,16 @@ } @Override public InputStream getInputStream(String remoteType, FTPClient ftp, String fileName, SmbFile smbFile, ByteArrayOutputStream out){ + return getInputStream(remoteType, ftp, fileName, smbFile, out, true); + } + @Override + public InputStream getInputStream(String remoteType, FTPClient ftp, + String fileName, SmbFile smbFile, ByteArrayOutputStream out, + boolean transcoding) { InputStream inputStream = null; if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){ out = new ByteArrayOutputStream(); - inputStream = ftpFileManager.getInputStream(ftp, fileName, out); + inputStream = ftpFileManager.getInputStream(ftp, fileName, out, transcoding); }else if(DeviceInterface.INTERFACETYPE_SHAREFOLDER.equals(remoteType)){ inputStream = smbFileManager.getInputStream(smbFile); } @@ -48,8 +54,14 @@ public boolean moveFile(String remoteType, String fileName, FTPClient ftp, String sourceRoute, String targetRoute, SmbSession session, SmbFile smbForm) { + return moveFile(remoteType, fileName, ftp, sourceRoute, targetRoute, session, smbForm, true); + } + @Override + public boolean moveFile(String remoteType, String fileName, FTPClient ftp, + String sourceRoute, String targetRoute, SmbSession session, + SmbFile smbForm, boolean transcoding) { if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){ - return ftpFileManager.moveFile(fileName, ftp, sourceRoute, targetRoute); + return ftpFileManager.moveFile(fileName, ftp, sourceRoute, targetRoute, transcoding); }else if(DeviceInterface.INTERFACETYPE_SHAREFOLDER.equals(remoteType)){ return smbFileManager.moveSmbFile(session, smbForm, targetRoute); } Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/SteriVac3MManagerImpl.java =================================================================== diff -u -r37154 -r37158 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/SteriVac3MManagerImpl.java (.../SteriVac3MManagerImpl.java) (revision 37154) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/SteriVac3MManagerImpl.java (.../SteriVac3MManagerImpl.java) (revision 37158) @@ -75,7 +75,7 @@ String[] shareList = null; Integer length = 0; if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){ - ftp = ftpFileManager.getFTPClient(ip, devInterface.getPort(), userName, pwd, enableDetailedDeviceInformation, loginUserData); + ftp = ftpFileManager.getFTPClient(ip, devInterface.getPort(), userName, pwd, enableDetailedDeviceInformation, loginUserData,"GBK"); ftp.setFileType(FTP.BINARY_FILE_TYPE); rootPath = ftpFileManager.getCurrentPath(ftp) + directory;//根目录 ftpFileManager.changeWorkingDirectory(ftp, rootPath); @@ -132,7 +132,7 @@ FTPFile ftpFileXml = null; SmbFile smbFormXml = null; if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){ - ftpFileXml = ftpFileManager.getFileByFileName(xmlName, ftpFileManager.getCurrentPath(ftp), ftp); + ftpFileXml = ftpFileManager.getFileByFileName(xmlName, ftpFileManager.getCurrentPath(ftp), ftp,false); if(ftpFileXml == null){ continue; } @@ -146,8 +146,8 @@ copyPng(smbFormXml, devInterface, remoteType, ftp, ftpFileXml, enableDetailedDeviceInformation, loginUserData); objectDao.save(record); objectDao.excuteSQL(" update " + SterilizationRecord.class.getSimpleName() + " set sterilizationParaType=" + SterilizationRecord.STERILIZATIONPARATYPE_STERIVAC3M_GS8_1D + " where id="+record.getSterilizationRecordId()); - commonFileManager.moveFile(remoteType, xmlName, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbFormXml); - commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); + commonFileManager.moveFile(remoteType, xmlName, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbFormXml,false); + commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm,false); } } } catch (Exception e) { @@ -285,7 +285,7 @@ fileName = remoteFile.getName(); } fileName = fileName.replace(".xml", ".png"); - inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, out); + inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, out, false); String propFilePath = PathUtils.getWebAppRootPath() + "/UserUpLoadFiles/GS83MPNG/" + fileName; File file = new File(propFilePath); Files.copy(inputStream, file.toPath()); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManager.java =================================================================== diff -u -r36896 -r37158 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManager.java (.../CommonFileManager.java) (revision 36896) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManager.java (.../CommonFileManager.java) (revision 37158) @@ -21,6 +21,14 @@ */ public InputStream getInputStream(String remoteType, FTPClient ftp, String fileName, SmbFile smbFile, ByteArrayOutputStream fos); /** + * 获取文件输入流 + * @param ftp FTPClient + * @param ftpFile FTPFile + * @param transcoding 是否转码 + * @return + */ + public InputStream getInputStream(String remoteType, FTPClient ftp, String fileName, SmbFile smbFile, ByteArrayOutputStream fos,boolean transcoding); + /** * 移动文件 * @param remoteType 远程方式 * @param fileName ftp方式参数 文件名 @@ -32,6 +40,19 @@ */ public boolean moveFile(String remoteType, String fileName, FTPClient ftp, String sourceRoute, String targetRoute,SmbSession session, SmbFile smbForm); /** + * 移动文件 + * @param remoteType 远程方式 + * @param fileName ftp方式参数 文件名 + * @param ftp ftp方式参数 FTPClient + * @param sourceRoute ftp方式参数 原路径 + * @param targetRoute 目标路径 + * @param session smbfile方式参数 SmbSession + * @param smbForm smbfile方式参数 移动前SmbFile + * @param transcoding 是否转码 + */ + public boolean moveFile(String remoteType, String fileName, FTPClient ftp, String sourceRoute, String targetRoute,SmbSession session, SmbFile smbForm, boolean transcoding); + + /** * 创建文件 * @param remoteType远程方式 * @param ftp Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/FtpFileManagerImpl.java =================================================================== diff -u -r30575 -r37158 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/FtpFileManagerImpl.java (.../FtpFileManagerImpl.java) (revision 30575) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/FtpFileManagerImpl.java (.../FtpFileManagerImpl.java) (revision 37158) @@ -31,14 +31,25 @@ @Override public FTPFile getFileByFileName(String fileName, String targetRoute, FTPClient ftp) throws IOException { + return getFileByFileName(fileName, targetRoute, ftp, true); + } + @Override + public FTPFile getFileByFileName(String fileName, String targetRoute, + FTPClient ftp, boolean transcoding) throws IOException { FTPFile file = null; try { FTPFileFilter filter = new FTPFileFilter() { @Override public boolean accept(FTPFile file) { try { - if(new String(file.getName().getBytes("UTF-8"),"iso-8859-1").equals(fileName)){ - return true; + if(transcoding){ + if(new String(file.getName().getBytes("UTF-8"),"iso-8859-1").equals(fileName)){ + return true; + } + }else{ + if(file.getName().equals(fileName)){ + return true; + } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); @@ -102,6 +113,11 @@ } @Override public boolean moveFile(String fileName, FTPClient ftp, String sourceRoute, String targetRoute){ + return moveFile(fileName, ftp, sourceRoute, targetRoute, true); + } + @Override + public boolean moveFile(String fileName, FTPClient ftp, String sourceRoute, + String targetRoute, boolean transcoding) { boolean moveResult = false; try { changeWorkingDirectory(ftp, sourceRoute); @@ -115,7 +131,11 @@ if(StringUtil.isContainChinese(targetRoute)){ targetRoute = new String(targetRoute.getBytes("UTF-8"),"iso-8859-1"); } - moveResult = ftp.rename(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"), targetRoute + File.separator + new String(fileName.getBytes("UTF-8"),"ISO-8859-1")); + if(transcoding){ + moveResult = ftp.rename(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"), targetRoute + File.separator + new String(fileName.getBytes("UTF-8"),"ISO-8859-1")); + }else{ + moveResult = ftp.rename(fileName, targetRoute + File.separator + fileName); + } } catch (Exception e) { throw new RuntimeException(e.getMessage()); } @@ -167,11 +187,20 @@ } @Override public InputStream getInputStream(FTPClient ftp, String fileName, ByteArrayOutputStream fos){ + return getInputStream(ftp, fileName, fos, true); + } + @Override + public InputStream getInputStream(FTPClient ftp, String fileName, + ByteArrayOutputStream fos, boolean transcoding) { InputStream inputStream = null; try { fos = new ByteArrayOutputStream(); //读取文件,使用下载文件的方法把文件写入内存,绑定到out流上 - ftp.retrieveFile(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"), fos); + if(!transcoding){ + ftp.retrieveFile(fileName, fos); + }else{ + ftp.retrieveFile(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"), fos); + } inputStream = new ByteArrayInputStream(fos.toByteArray()); } catch (Exception e) { throw new RuntimeException("获取inputStream异常" + e.getMessage()); @@ -215,6 +244,12 @@ */ @Override public FTPClient getFTPClient(String ip, Integer port, String userName, String pwd, boolean showLogInfo, LoginUserData loginUserData){ + return getFTPClient(ip, port, userName, pwd, showLogInfo, loginUserData, "UTF-8"); + } + @Override + public FTPClient getFTPClient(String ip, Integer port, String userName, + String pwd, boolean showLogInfo, LoginUserData loginUserData, + String controlEncoding) { FTPClient ftp = null; try { ftp = new FTPClient(); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/FtpFileManager.java =================================================================== diff -u -r30575 -r37158 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/FtpFileManager.java (.../FtpFileManager.java) (revision 30575) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/FtpFileManager.java (.../FtpFileManager.java) (revision 37158) @@ -21,6 +21,16 @@ */ public FTPFile getFileByFileName(String fileName, String targetRoute, FTPClient ftp) throws IOException; /** + * 获取指定目录下的文件fileName + * @param fileName 文件名 + * @param targetRoute 路径 "":当前目录 + * @param ftp + * @param transcoding 文件名是否转码 + * @return + * @throws IOException + */ + public FTPFile getFileByFileName(String fileName, String targetRoute, FTPClient ftp, boolean transcoding) throws IOException; + /** * 复制文件 * @param fileName 文件名 * @param ftpClient @@ -51,6 +61,15 @@ * @param targetRoute 目标路径 */ public boolean moveFile(String fileName, FTPClient ftp, String sourceRoute, String targetRoute); + /** + * 移动文件 + * @param fileName 文件名 + * @param ftp FTPClient + * @param sourceRoute 原路径 + * @param targetRoute 目标路径 + * @param transcoding 是否转码 + */ + public boolean moveFile(String fileName, FTPClient ftp, String sourceRoute, String targetRoute, boolean transcoding); /** * 移动文件 @@ -87,6 +106,15 @@ */ public InputStream getInputStream(FTPClient ftp, String fileName, ByteArrayOutputStream fos); /** + * 获取文件输入流 + * @param ftp FTPClient + * @param fileName 文件名 + * @param fos + * @param transcoding 是否转码 + * @return + */ + public InputStream getInputStream(FTPClient ftp, String fileName, ByteArrayOutputStream fos, boolean transcoding); + /** * FTP转换工作空间 * @param ftp * @param path 工作空间相对路径或绝对路径 @@ -110,6 +138,17 @@ */ public FTPClient getFTPClient(String ip, Integer port, String userName, String pwd, boolean showLogInfo, LoginUserData loginUserData); /** + * FTP连接远程 + * @param ip + * @param port + * @param userName + * @param pwd + * @param showLogInfo 是否展示日志,用于调式接口 + * @param loginUserData 登录用户,用于调式接口 + * @param controlEncoding 文件编码 会影响读取到的文件名称是否乱码 + */ + public FTPClient getFTPClient(String ip, Integer port, String userName, String pwd, boolean showLogInfo, LoginUserData loginUserData, String controlEncoding); + /** * 关闭FTP连接 * @param ftp */