sftp 上传文件失败问题

通过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

img

2.上传至省服务器sftp

img

试过手动上传原先程序上传的文件吗?
有没有可能是因为服务器那边的安全策略,上传后被当恶意文件自动删除了?