标签: apache-commons-net

在FTPClient中上传进度

我正在使用commons-net FTPClient上传一些文件.
如何获得上传进度(现在上传的字节数)?

谢谢

java ftp-client apache-commons-net

4
推荐指数
1
解决办法
4876
查看次数

在单个连接中从多个文件中共享FTPClient InputStream

我的要求是从不同的目录获取所需文件扩展名的文件列表,并在获取文件本身时我应该获取输入流并进行一些处理....我试图获取具有所需文件扩展名的文件列表,然后我试图从该列表中的所有选定文件获取输入流.对于第一次迭代,我得到所需的文件,我也得到一个文件的流,但对于下一个文件,我得到一个空指针异常.我也无法从第二次迭代中获取文件列表

我用来测试的示例代码:

        System.out.println(ftp.printWorkingDirectory());
        boolean status = ftp
                .changeWorkingDirectory("mydirectory");
        System.out.println("Status of Change Directory:" + status);
        System.out.println(ftp.printWorkingDirectory());
        InputStream is = null;

        System.out.println(ftp.printWorkingDirectory());
        System.out.println(ftp.isConnected());

        FTPFile[] list2 = ftp.listFiles();
        System.out.println("Number of files in this directory:"
                + list2.length);
        for (int i = 0; i < list2.length; i++) {
            System.out.println("-------[" + list2[i].getName()
                    + "]---------------------");
            is = ftp.retrieveFileStream(list2[i].getName());
            int bytesRead = 0;
            byte[] buffer = new byte[1024];
            while ((bytesRead = is.read(buffer, 0, buffer.length)) > 0) {
                System.out.println(new String(buffer, 0, bytesRead));
            }
            //is.close();

            System.out.println("-------[END:" + list2[i].getName()
                    + "]---------------------"); …
Run Code Online (Sandbox Code Playgroud)

java ftp ftp-client apache-commons-net

4
推荐指数
1
解决办法
7020
查看次数

如何使用apache.commons.net.ftps配置客户端身份验证?

我使用apache.commons.net -framework 在java中实现了FTPS客户端(FTP over SSL/TLS).它被配置为在默认端口21上执行显式安全性.

ftpsClient = new FTPSClient(false);
ftpsClient.setTrustManager(getConfiguration().getCertificatesManager());
ftpsClient.connect(getConfiguration().getHostName(), getConfiguration().getPort());
Run Code Online (Sandbox Code Playgroud)

只要我不在服务器上强制执行客户端身份验证,一切正常.但我需要启用客户端身份验证,因此我在服务器上强制执行它并配置客户端系统属性:

-Djavax.net.ssl.keyStore="D:/.../ftps-client-auth.keystore"
-Djavax.net.ssl.keyStorePassword="*****"
-Djavax.net.ssl.keyStoreType=JKS
Run Code Online (Sandbox Code Playgroud)

我得到的就像我没有设置系统属性一样:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1806)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:986)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
    at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:265)
    at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:207)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:172)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:192)
Run Code Online (Sandbox Code Playgroud)

服务器日志说:

DEBUG: Client "<my ip address>", "SSL_accept failed: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate"
Run Code Online (Sandbox Code Playgroud)

似乎没错 - 我启用了-Djavax.net.debug = all,这表明服务器发送了它接受的CN列表,但是客户端发送了一个空的证书链.

  • 我做错了什么?
  • 我是否需要以编程方式进行一些配置?
  • 证书或私钥是否需要支持SSL/TLS的特殊功能?

java authentication ssl ftps apache-commons-net

4
推荐指数
1
解决办法
1万
查看次数

FTP apache在java中提交进度条

我正在开发一个小程序,它可以将文件上传到我的FTP服务器并用它做一些其他的事情.现在......一切正常,我正在使用org.apache.commons.net.ftp FTPClient该类进行上传.

ftp = new FTPClient();
ftp.connect(hostname);
ftp.login(username, password);

ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.changeWorkingDirectory("/shares/public");
int reply = ftp.getReplyCode();

if (FTPReply.isPositiveCompletion(reply)) {
    addLog("Uploading...");
} else {
    addLog("Failed connection to the server!");
}

File f1 = new File(location);
in = new FileInputStream(

ftp.storeFile(jTextField1.getText(), in);

addLog("Done");

ftp.logout();
ftp.disconnect();
Run Code Online (Sandbox Code Playgroud)

应上传的文件在hTextField1中命名.现在......我如何添加进度条?我的意思是,ftp.storeFile中没有流...我该如何处理?

谢谢你的帮助!:)

问候

java ftp progress-bar apache-commons-net

4
推荐指数
1
解决办法
9321
查看次数

如何使用 apache-commons net 中生成的证书配置客户端身份验证

首先,我知道这里有一个类似的问题,但它并没有回答我的疑问。我有一个配置了 SSL 的 FTPS 服务器 (vsftpd)。

我已经生成了适当的密钥:

openssl req -x509 -nodes -days 1825 -newkey rsa:2048 \
-keyout private/vsftpd.key \
-out certs/vsftpd.crt
Run Code Online (Sandbox Code Playgroud)

并在服务器中配置了相应的conf文件。

现在,在使用 Apache commons net 的 Java 客户端代码中,我可以通过 SSL 与服务器进行通信,如下所示:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;

public class CommonsNetFTPSTest {
public static void main(String[] args) throws Exception {
    System.setProperty("javax.net.debug", "ssl");

    String server = "XXX.XXX.XXX.XXX";
    String username = "USER_TEST";
    String password = "ABCD1234";
    String remoteFile = "/Data/Input/PH240819";
    String localFile = …
Run Code Online (Sandbox Code Playgroud)

java authentication ssl ftps apache-commons-net

4
推荐指数
1
解决办法
1万
查看次数

使用Apache FtpClient计算FTP服务器中的文件校验和

我正在使用Apache Commons Net的FtpClient将视频上传到FTP服务器.要检查文件是否确实已成功传输,我想计算远程文件的校验和,但遗憾的是我发现没有可用的相关API.

我的问题是:是否需要在ftp服务器中计算文件校验和?
如果答案是肯定的,那么如何在FtpClient中获取校验和?
如果答案是否定的,那么FtpClient如何知道文件是否真的成功并完全转移?

ftp checksum ftp-client apache-commons-net

4
推荐指数
1
解决办法
6464
查看次数

将文件上传到 testcontainer FTP 服务器失败,连接后连接被拒绝

我正在使用FTPClient针对 FTP 服务器使用Testcontainers.

可重现的代码示例如下:

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.images.builder.ImageFromDockerfile;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import static org.assertj.core.api.Assertions.assertThat;

@Testcontainers
class FtpUtilsTest {

    private static final int PORT = 21;
    private static final String USER = "user";
    private static final String PASSWORD = "password";
    private static final int FTP_TIMEOUT_IN_MILLISECONDS = 1000 * 60;

    private static final GenericContainer ftp = new …
Run Code Online (Sandbox Code Playgroud)

java ftp ftp-client apache-commons-net testcontainers

4
推荐指数
1
解决办法
2926
查看次数

“连接未打开” FTP Android

每次尝试连接时,都会收到异常“连接未打开”。当我尝试通过 FileZilla 或浏览器访问时,服务器运行良好。

我正在使用 apache-common-net 库。

private Boolean downloadAndSaveFile(String server, int portNumber,
                                    String user, String password, String filename, File localFile)
        throws IOException {
    FTPClient ftp = null;

    try {
        ftp = new FTPClient();
        ftp.connect(server, portNumber);

        ftp.login(user, password);

        ftp.setFileType(FTP.BINARY_FILE_TYPE);

        ftp.enterLocalPassiveMode();

        OutputStream outputStream = null;
        boolean success = false;
        try {
            outputStream = new BufferedOutputStream(new FileOutputStream(
                    localFile));
            success = ftp.retrieveFile(filename, outputStream);
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }

        return success;
    } finally {
        if (ftp != null) { …
Run Code Online (Sandbox Code Playgroud)

java ftp android apache-commons-net

3
推荐指数
1
解决办法
4071
查看次数

使用 FTPClient.getModificationTime 在 FTP 服务器中获取文件的上次修改日期会产生 null

我试图从 FTP 环境中获取文件的最后修改日期。结果不符合预期。

通过使用ftpClient.getModificationTime("File path")我得到null

通过使用FTPFile.getTimestamp().getTime()我得到了错误的最后修改(即真正的最后修改是今天,我得到的是Wed Feb 18 02:55:22 EST 2004)。

如何获得正确的最后修改时间?

文件在 FTP 上

提前致谢。

java ftp timestamp apache-commons-net

3
推荐指数
1
解决办法
4774
查看次数

为 FTP 协议启用 Apache Commons Net 中的日志记录

Apache Commons Net 库似乎没有向任何“记录器”发送任何内容。

我可以以某种方式从(FTP)会话中获取日志文件以进行调试吗?例如来自服务器的原始 FTP 命令和响应,如下所示:

220 Welcome
USER *******
331 Password required for ...
PASS *******
230 Logged on
TYPE I
200 Type set to I
QUIT
221 Goodbye
Run Code Online (Sandbox Code Playgroud)

java ftp logging apache-commons-net

3
推荐指数
1
解决办法
2416
查看次数