通过winSCP可连接省服务器sftp,并上传文件。本地服务器上传文件到省服务器sftp,日志显示正常创建文件夹,正常上传文件,没有报错,但是省服务器sftp中只有新建的文件夹,没有文件。但其他公司可以上传文件到省sftp服务器中。但是同一个服务器,上传到另一台服务器sftp(部署在云服务器上)完全正常,正常创建文件夹,正常上传文件。
创建的文件夹看到权限是有的,空间也没有不足。
上传代码:
* 上传多个文件
* @param directory 文件夹
* @param sftpFileName
* @param input
* @param sftp
* @throws SftpException
*/
public void uploadMore(String directory, String sftpFileName, InputStream input,ChannelSftp sftp) throws SftpException {
try {
logger.info("qytb -> uploadMore 进入目录 directory="+directory);
sftp.cd(directory);
} catch (SftpException e) {
// 目录不存在,则创建文件夹
logger.info("qytb -> uploadMore 目录不存在 -> directory="+directory);
directory = directory.replace("\\","/");
String[] dirs = directory.split("/");
String[] dirs2 = new String[dirs.length-2];
for (int i = 1; i < dirs.length-1; i++) {
dirs2[i-1] = dirs[i];
}
String tempPath = "";
int index = 0;
logger.info("qytb -> uploadMore 目录不存在,执行mkdirDir前 -> dirs2="+ JSON.toJSONString(dirs2));
mkdirDir(dirs2, tempPath, dirs2.length, index,sftp);
}
try {
logger.info("qytb -> uploadMore 上传前的所在路径 -> sftp.pwd()="+ sftp.pwd());
sftp.put(input, sftpFileName);
logger.info("qytb -> sftp.put(input, sftpFileName)执行完成!");
} catch (Exception e) {
logger.info("qytb -> 上传文件 sftp.put(input, sftpFileName)出现异常!",e);
}
}
创建文件夹:
public void mkdirDir(String dirs[],String tempPath,int length,int index,ChannelSftp sftp){
index++;
if ( index < length ){
tempPath += "/" + dirs[index];
}
try {
logger.info("检测目录[" + tempPath + "]");
sftp.cd(tempPath);
if (index < length) {
logger.info("递归创建目录[" + tempPath + "]");
mkdirDir(dirs, tempPath, length, index,sftp);
}
} catch (SftpException ex) {
logger.warn("创建目录[" + tempPath + "]");
try {
sftp.mkdir(tempPath);
sftp.cd(tempPath);
} catch (SftpException e) {
e.printStackTrace();
logger.error("创建目录[" + tempPath + "]失败,异常信息[" + e.getMessage() + "]");
}
logger.info("进入目录[" + tempPath + "]");
mkdirDir(dirs, tempPath, length, index,sftp);
}
}
1.上传至自己部署的服务器sftp,服务器也是云服务器 windows server 2012
2.上传至省服务器sftp
试过手动上传原先程序上传的文件吗?
有没有可能是因为服务器那边的安全策略,上传后被当恶意文件自动删除了?