Apache commons net FTPClient storeFile() 创建带有用户名前缀的文件
Apache commons net FTPClient storeFile() creating file with the username prefixed
新年快乐! :)
因此,我第一次使用 Apache Commons FTPClient 将文件 FTP 发送到大型机 FTP 服务器。我有下面的代码来设置所需的配置,最终 FTP 使用 storeFile() 的文件似乎可以工作,除了下面的一个小问题。
ftpClient.login(username, password);
System.out.println(ftpClient.getReplyString());
File blankFile = new File("./src/main/resources/BLANK.DAT");
System.out.println("File exists: "+ blankFile.exists());
InputStream inputStream = new FileInputStream(blankFile);
ftpClient.sendSiteCommand("sbdataconn=****.****.*****"); --Hidden from post
System.out.println(ftpClient.getReplyString());
ftpClient.sendCommand(FTPCmd.PWD);
System.out.println(ftpClient.getReplyString());
ftpClient.sendSiteCommand("lrecl=80 blksize=3120 recfm=FB");
System.out.println(ftpClient.getReplyString());
ftpClient.sendSiteCommand("pri=5 sec=15");
System.out.println(ftpClient.getReplyString());
ftpClient.storeFile("Destination.File.Name",inputStream);
System.out.println(ftpClient.getReplyString());
相应的控制台输出日志说:
Connected to ****ftp.****.com.
220-FTPD1 IBM FTP CS V2R3 at *****, 06:46:21 on 2021-01-05.
220 Connection will close if idle for more than 15 minutes.
230 USERNAME is logged on. Working directory is "USERNAME.".
File exists: true
200 SITE command was accepted
257 "'USERNAME.'" is working directory.
200 SITE command was accepted
200 SITE command was accepted
250 Transfer completed successfully.
Mainframes 团队确认他们正在查看该文件,但文件名为 'USERNAME.Destination.File.Name'
,但我们需要将文件命名为 'Destination.File.Name'
才能开始下一步处理。我的配置中是否缺少某些内容?或者这是使用 Apache Commons FTPing 到大型机时的预期行为。我如何从这里走得更远?任何帮助表示赞赏。谢谢!
好吧,看来 FTPClient 的 storeFile() 方法中的文件名必须用单引号 ('') 括起来,才能使用该名称创建文件。所以,解决办法就是简单地替换
ftpClient.storeFile("Destination.File.Name",inputStream);
和
ftpClient.storeFile("'Destination.File.Name'",inputStream);
它按预期工作。
谢谢,祝 2021 年愉快。
新年快乐! :)
因此,我第一次使用 Apache Commons FTPClient 将文件 FTP 发送到大型机 FTP 服务器。我有下面的代码来设置所需的配置,最终 FTP 使用 storeFile() 的文件似乎可以工作,除了下面的一个小问题。
ftpClient.login(username, password);
System.out.println(ftpClient.getReplyString());
File blankFile = new File("./src/main/resources/BLANK.DAT");
System.out.println("File exists: "+ blankFile.exists());
InputStream inputStream = new FileInputStream(blankFile);
ftpClient.sendSiteCommand("sbdataconn=****.****.*****"); --Hidden from post
System.out.println(ftpClient.getReplyString());
ftpClient.sendCommand(FTPCmd.PWD);
System.out.println(ftpClient.getReplyString());
ftpClient.sendSiteCommand("lrecl=80 blksize=3120 recfm=FB");
System.out.println(ftpClient.getReplyString());
ftpClient.sendSiteCommand("pri=5 sec=15");
System.out.println(ftpClient.getReplyString());
ftpClient.storeFile("Destination.File.Name",inputStream);
System.out.println(ftpClient.getReplyString());
相应的控制台输出日志说:
Connected to ****ftp.****.com.
220-FTPD1 IBM FTP CS V2R3 at *****, 06:46:21 on 2021-01-05.
220 Connection will close if idle for more than 15 minutes.
230 USERNAME is logged on. Working directory is "USERNAME.".
File exists: true
200 SITE command was accepted
257 "'USERNAME.'" is working directory.
200 SITE command was accepted
200 SITE command was accepted
250 Transfer completed successfully.
Mainframes 团队确认他们正在查看该文件,但文件名为 'USERNAME.Destination.File.Name'
,但我们需要将文件命名为 'Destination.File.Name'
才能开始下一步处理。我的配置中是否缺少某些内容?或者这是使用 Apache Commons FTPing 到大型机时的预期行为。我如何从这里走得更远?任何帮助表示赞赏。谢谢!
好吧,看来 FTPClient 的 storeFile() 方法中的文件名必须用单引号 ('') 括起来,才能使用该名称创建文件。所以,解决办法就是简单地替换
ftpClient.storeFile("Destination.File.Name",inputStream);
和
ftpClient.storeFile("'Destination.File.Name'",inputStream);
它按预期工作。
谢谢,祝 2021 年愉快。