SFTPの下でLinux上のファイルを送信するときに、自動的にマルチレベルのディレクトリを作成します

著作権:Copyright権利を保有https://blog.csdn.net/weixin_39921821/article/details/90646283

投稿者:

        今日では、SFTPでファイルを送信する際にいくつかの時間前に、テスト手順を書かれた、このような問題は、成功に送信することができますが、ディレクトリを見つけることができなかった、慎重なテストが伐採によって発見した後、小さな問題が、頭痛の種であります小さな問題を置き、分割ディレクトリにあります。

コードを接続します。

/**
	 * 将输入流的数据上传到sftp作为文件。文件完整路径=basePath+directory
	 * 
	 * @param basePath
	 *            服务器的基础路径
	 * @param directory
	 *            上传到该目录
	 * @param sftpFileName
	 *            sftp端文件名
	 * @param input
	 *            输入流 throws SftpException
	 */
	public boolean upload(String directory, String sftpFileName,
			InputStream input) {
		boolean ret = false;
		try {
			// sftp.cd(basePath);
			sftp.cd(directory);
			ret = true;
		} catch (SftpException e) {
			Log4jBean.logger.error("对方目录可能不存在[" + directory + "],需要创建目录,异常信息为["
					+ e.getMessage() + "]");

			// 目录不存在,则创建文件夹
			String[] dirs = directory.split("/");
			String tempPath = "";
			for (String dir : dirs) {
				if (null == dir || "".equals(dir))
					continue;
				 tempPath+="/"+dir;
				//tempPath = dir;
				try {
					Log4jBean.logger.info("检测目录[" + tempPath + "]");
					sftp.cd(tempPath);
					ret = true;
				} catch (SftpException ex) {
					try {
						Log4jBean.logger.error("创建目录[" + tempPath + "]");
						sftp.mkdir(tempPath);
						sftp.cd(tempPath);
						Log4jBean.logger.error("进入目录[" + tempPath + "]");
						ret = true;
					} catch (SftpException e1) {
						Log4jBean.logger.error("创建目录[" + tempPath
								+ "]失败1,异常信息[" + e1.getMessage() + "]");
						ret = false;
						return ret;
					} catch (Exception e1) {
						Log4jBean.logger.error("创建目录[" + tempPath
								+ "]失败2,异常信息[" + e1.getMessage() + "]");
						ret = false;
						return ret;
					}
				} catch (Exception e1) {
					Log4jBean.logger.error("创建目录[" + tempPath + "]失败3,异常信息["
							+ e1.getMessage() + "]");
					ret = false;
					return ret;
				}
			}
			Log4jBean.logger.info("创建目录完成");
			ret = true;
		} catch (Exception e1) {
			Log4jBean.logger.error("进入目录[" + directory + "]失败,异常信息["
					+ e1.getMessage() + "]");
			ret = false;
			return ret;
		}

		try {
			sftp.put(input, sftpFileName);// 上传文件
			ret = true;
		} catch (SftpException e) {
			Log4jBean.logger.error("Sftp文件处理异常,异常信息为[" + e.getMessage() + "]");
			ret = false;
		}
		return ret;
	}

エラーの場所:

           これは、終了ループは、以下のプログラムを空に実行されているディレクトリを確認した後、前に変更されていない場合は、その後の質問は、ファイルを送信するために行くのスーパー管理者ユーザーは、SFTPに接続されていない使用して、Linuxで、ヒットしましたサイクルパスの時間と相対パスを直接各層を決定するとき、成功した経路を作成するために空気を引き起こすことが容易であり、元のファイルの場所未満を置きます。あなたは「/」ファイル/ Grgz / XXX.txt、あなたはこのディレクトリは空でありますファイルの前で分割仕上がりで、率先していなかったような相対パスとして、分割されたを使用しているので、しかし、あなたは目の前にあるファイルを追加する場合/言葉、それはより多くのディレクトリが最初からディレクトリを作成する原因となりますので、ああへと分割されません。

     だから、最良の方法は、絶対パスを追加することですので、最も安全、最高

    ここで私は絶対パス(彼らの実際の状況に応じて書き込むことができます絶対パス)を取得する方法があります

ここでは、空の出口が次の裁判官に継続するように変更裁判官ディレクトリがレベルをチェックする時空のカタログを、宣告する前に、それが漏れないケースがあります。これは非常に重要です 

レンダリング:

この場合、それはO(∩_∩)O笑〜非常に良い、チェックするためにレベルを作成します。 

おすすめ

転載: blog.csdn.net/weixin_39921821/article/details/90646283