使用 Java FTP 客户端从 ColdFusion 9 保护 FTP

Secure FTP From ColdFusion 9 Using Java FTP Client

这是 的后续。正确答案会导致尝​​试使用 Apache Commons 库中的 SFTPClient class。

我可以连接。下一步是上传文件。有很多参考 material 和示例源代码。我使用 this one 作为指导。它不安全 FTP,但很容易遵循。这是我试图模拟的 java 代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

public class FTPUploadFileDemo {

    public static void main(String[] args) {
        String server = "www.myserver.com";
        int port = 21;
        String user = "user";
        String pass = "pass";

        FTPClient ftpClient = new FTPClient();
        try {

            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();

            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // This was considered unnecessary because I was sending n ASCII file

            // APPROACH #1: uploads first file using an InputStream
            File firstLocalFile = new File("D:/Test/Projects.zip");

            String firstRemoteFile = "Projects.zip";
            InputStream inputStream = new FileInputStream(firstLocalFile);

            System.out.println("Start uploading first file");
            boolean done = ftpClient.storeFile(firstRemoteFile, inputStream);
            inputStream.close();
and some more code that's not relevent, 

这是我的 ColdFusion 等效项:

localFilename = "d:\dw\dwtest\dan\textfiles\randomText.txt"; 
remoteFileName = "randomText.txt";

javaFtpClient = CreateObject("java", 
  "org.apache.commons.net.ftp.FTPSClient").init("SSL", JavaCast("boolean",true));
// note that I am using a secure client

 javaInputFile = createObject("java", "java.io.File").init(localFilename); 
 javaInputStream = createObject("java", "java.io.FileInputStream").init(javaInputFile); 

// connect and login 
javaFtpClient.connect(JavaCast("string","something"),990); 
loginStatus = javaFtpClient.login('valid username','valid password');
writeoutput("login status " & loginStatus & "<br>"); 
javaFtpClient.enterLocalPassiveMode();


uploadStatus = javaFtpClient.storeFile(remoteFileName, javaInputStream); 
writeOutput("upload status " & uploadStatus & "<br>"); javaInputStream.close();

// logout and disconnect 
javaFtpClient.logout(); 
javaFtpClient.disconnect();

writeoutput("done" & "<br>");

输出显示登录成功,文件上传失败。使用 FileZilla 确认缺少文件。

有人能看出为什么文件没有上传吗?

命令javaFtpClient.execProt("P")是必需的。将 PROT 设置为 "P" 会将数据通道保护级别设置为私有。