用Java FTP客户端并行上传文件
我正在使用GPars与ftp4j client库以: 并行上传文件 GParsPool.withPool { files.eachParallel { file -> ftpClient.upload(directory, stream) } 但是,现在我只有FTP4J客户端不起作用的服务器ELB地址,因此我将客户端更改为Apache Commons Net FTP客户端,这不是线程安全的,因为我无法并行化. 还有其他FTP库支持并行化和远程验证false(支持ELB)?? 或,我需要在服务器端(ELB配置)做某事,以便我不需要更改FTP客户端?? 解决方案 您无法在一个FTP连接上并行上传多个文件.您正在使用哪个FTP库以及线程是否安全都无关紧要.协议本身不允许这样做. 即使确实如此(例如SFTP确实如此),它也不会带来任何性能优势. 您必须为每个线程打开一个单独的连接.
16 2023-05-22
编程技术问答社区
如何用STARTTLS连接到Office365 SMTP?我一直收到 "先发送你好 "的错误
我正在尝试使用StartTLS(在SMTP.Office365.com端口587)连接到Office365 SMTP服务器.当我发送AUTH PLAIN时,它说503 5.5.2 Send hello first.我在做什么错? 这是我与服务器的对话: 02-03 02:58:56.951: I/System.out(1547): 220 MEXPR01CA0064.outlook.office365.com Microsoft ESMTP MAIL Service ready at Wed, 3 Feb 2016 07:58:55 +0000 02-03 02:58:59.781: I/System.out(1547): EHLO codolutions.com 02-03 02:59:12.841: I/System.out(1547): 250-MEXPR01CA0064.outlook.office365.com Hello [49.180.156.25] 02-03 02
2 2023-05-08
编程技术问答社区
在Java中上传字节数组到FTP
我的目标是能够将文件上传到FTP服务器,我已经进行了一些研究,并看到了如果文件已经在本地存储的方式上传文件的方式,我有一个返回byte[]的函数,所以我是想知道如何将该文件发送到FTP服务器中的文件是否存在于内存中. private void connect() throws IOException { FTPClient ftpClient = new FTPClient(); ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); ftpClient.connect(ftp.getServer(), ftp.getPort()); int reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) {
18 2023-04-21
编程技术问答社区
如何在JSch中设置文件类型和文件传输模式?
我使用了Apache Common Net FTPClient,并在上传文件之前已将我的ftpClient设置为ftpClient. ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE); 现在我尝试使用JSCH.在文件上传之前是否需要相同的设置以及它们的外观?谢谢. 解决方案 首先,从您的问题中不清楚,您是否知道JSCH和Apache Commons Net FtpClient每个人都使用完全不同且无关的协议. JSCH是SSH/SFTP客户端,而FtpClient是FTP客户端. JSCH使用SFTP协议版本3. 在SFTP协议版本3中,没有传输模式.或换句话说,只有 binary 传输模式. ,即使JSCH使用了支持 ascii 模式的SFTP协议的较新版本, binary 模式还是SFTP中的默认模式.
6 2023-04-21
编程技术问答社区
在一次调用中获得整个FTP目录列表的递归,以减少时间。
,如果可能的话,使用Apache Commons API缩短时间,将整个FTP目录列表递归中.现在,我必须多次称呼它才能获取所有目录列表,是否有任何解决方案. 解决方案 没有标准方法可以从"一个呼叫"中的远程服务器请求递归目录. 因此,即使Apache Common Net(或任何其他库)具有单个调用API来请求递归目录列表,它在内部必须执行相同的递归算法,例如: 使用Java Apache Commons Net Library检索所有子文件夹内容 一些FTP服务器支持非标准的递归清单请求. 例如在Apache Commons Net中,您可以通过简单地将其预注入路径来注入: : ftpClient.listFiles("-R " + remotePath); 但是,只有在您确定已连接到Proftpd的情况下,才能使用它. 我不知道其他具有类似功能的FTP服务器.使用其他FTP服务器,您可以使用多个并行连接来优化列表. 如果您可以选择
14 2023-04-21
编程技术问答社区
使用Java Apache Commons Net库检索所有子文件夹的内容
使用Java Apache Commons Net FTPClient,是否可以进行listFiles呼叫,以检索目录的内容以及所有子目录的内容? 解决方案 库不能自己做.但是您可以使用简单的递归来实现它: private static void listFolder(FTPClient ftpClient, String remotePath) throws IOException { System.out.println("Listing folder " + remotePath); FTPFile[] remoteFiles = ftpClient.listFiles(remotePath); for (FTPFile remoteFile : remoteFiles) { if (!remoteFile.getName().equals(".") && !remoteFile.getN
14 2023-04-21
编程技术问答社区
Java FTP上传创建一个空文件
当我尝试使用Apache Commons FTPClient上传简单的文本文件和此代码时: FTPClient ftp = new FTPClient(); int reply; // connect try { ftp.connect(serverAdd); ftp.login(username,password); reply = ftp.getReplyCode(); if(FTPReply.isPositiveCompletion(reply)){ System.out.println("Connected Success.."); // upload file try { String fileDir = "testfile.txt"; FileInputStream in = null; in
80 2023-04-21
编程技术问答社区
通过Maven中的Ant FTP任务上传文件
我正在尝试使用蚂蚁任务上传文件.如果我直接使用ant上传文件,但是如果我通过maven调用蚂蚁任务(使用maven-antrun-plugin),我会收到以下错误: 发生了一个蚂蚁构建感受:执行此行时发生以下错误: /home/me/proj/build.xml:15: Problem: failed to create task or type ftp Cause: the class org.apache.tools.ant.taskdefs.optional.net.FTP was not found. This looks like one of Ant's optional components. Action: Check that the appropriate optional JAR exists in -ANT_HOME/lib ant-commonsnet.jar显然可以使用: $ ls $ANT_HOME/lib | grep
12 2023-03-23
编程技术问答社区
如何在Java中把FTP服务器上的文件复制到同一服务器上的一个目录?
我正在使用Apache Commons FTP上传文件.在上传之前,我想检查该文件是否已经存在于服务器上,并将其从其备份到同一服务器上的备份目录. 有人知道如何将文件从FTP服务器复制到同一服务器上的备份目录吗? public static void uploadWithCommonsFTP(File fileToBeUpload){ FTPClient f = new FTPClient(); FTPFile backupDirectory; try { f.connect(server.getServer()); f.login(server.getUsername(), server.getPassword()); FTPFile[] directories = f.listDirectories(); FTPFile[] files = f.listFiles();
8 2023-03-14
编程技术问答社区
在Apache Commons Net中启用FTP协议的日志记录功能
Apache Commons Net Library似乎没有将任何内容发送给任何" Logger". 我可以以某种方式从(FTP)会话中获取日志文件吗?例如,使用服务器的RAW FTP命令和响应,例如: 220 Welcome USER ******* 331 Password required for ... PASS ******* 230 Logged on TYPE I 200 Type set to I QUIT 221 Goodbye 解决方案 Apache Commons Net中的所有协议实现,包括FTPClient,源自 SocketClient ,它具有方法 addProtocolCommandListener .您可以通过 实现记录. 有一个现成的实现使用这样的代码: ftpClient.addProtocolCommandListener( new PrintCommandListener( new Print
2 2023-03-13
编程技术问答社区
使用Apache FtpClient在FTP服务器中计算文件校验和
我正在使用Apache Commons Net的FTPCLIENT将视频上传到FTP服务器.要检查文件是否真的成功地传输了,我想计算远程文件的校验和,但是不幸的是,我发现没有我可以使用的相关API. 我的问题是:是否需要计算FTP服务器中的文件校验和? 如果答案是肯定的,那么如何在FTPCLCCLIENT中获得校验和? 如果答案是否定的,FTPCLIENT如何知道该文件是否真的是成功并完全传输的? 解决方案 使用FTP,我建议验证上传,如果可能的话,. 问题在于,没有用于使用FTP计算校验和的广泛标准API. 有许多有关FTP的校验和计算命令的建议. 都没有被接受. 最新提议是: 因此,不同的FTP服务器支持不同的校验和命令,并具有不同的语法. HASH,XSHA1,XSHA256,XSHA512,XMD5,MD5,XCRC,命名一些.您需要检查什么,如果有的话,您的FTP服务器支持. 您可以使用WINSCP进行测试. WINSCP支持所有前面提
6 2023-03-10
编程技术问答社区
用apache commons-net FTPClient传输原始二进制?
更新:已解决 我在登录之前调用FTPClient.setFileType() ,导致FTP服务器使用默认模式(ASCII),无论我将其设置为什么.另一方面,客户端的行为好像是正确设置了文件类型. BINARY模式现在正好按需要的方式工作,在所有情况下都会运输文件字节字节.我要做的只是在Wireshark中嗅出一点流量,然后使用NetCat模仿FTP命令,以查看发生了什么.我为什么两天前都没有想到?谢谢,大家的帮助! 我有一个XML文件,UTF-16编码,我使用Apache的Commons-Net-2.0 Java Library的FTPClient从FTP站点下载它.它提供了两种传输模式的支持:ASCII_FILE_TYPE和BINARY_FILE_TYPE,区别在于ASCII将用适当的本地行分隔符替换行分隔符('\r\n'或仅'\n' - 在十六进制中,0x0d0a或只是0x0a).我的问题是:我有一个测试文件,UTF-16编码,其中包含以下内容:
68 2023-01-27
编程技术问答社区
如何在apache-commons net中用生成的证书配置客户认证?
首先,我知道有一个类似的问题在这里,但它没有回答我的疑问. 我有一个配置了SSL的FTPS服务器(VSFTPD). 我已经生成了适当的密钥: openssl req -x509 -nodes -days 1825 -newkey rsa:2048 \ -keyout private/vsftpd.key \ -out certs/vsftpd.crt 并在服务器中配置了相应的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; impor
8 2023-01-19
编程技术问答社区
如何用apache.commons.net.ftps配置客户端认证?
我使用 apache.commons.net -framework在Java中实现了一个FTPS客户端(FTP)中的FTPS客户端(SSL/TLS). 它被配置为在默认端口21上进行显式安全性. ftpsClient = new FTPSClient(false); ftpsClient.setTrustManager(getConfiguration().getCertificatesManager()); ftpsClient.connect(getConfiguration().getHostName(), getConfiguration().getPort()); 只要我在服务器上执行客户端身份验证,一切都正常工作. 但我需要启用客户端身份验证,因此我在服务器上执行它并配置了客户端系统属性: -Djavax.net.ssl.keyStore="D:/.../ftps-client-auth.keystore" -Djavax.net.ssl.keyStorePa
22 2023-01-19
编程技术问答社区
Android-FTPS会话重用-无字段 sessionHostPortCache
我正在使用Android Studio在Android上开发一个应用程序,我想使用FTP将文件发送到服务器.由于服务器由托管服务提供商托管,因此我需要支持会话重复使用,并且显然他们已启用了会话. 我发现了这种反射hack 在这篇文章许多人用来使之成为可能: // adapted from: // https://trac.cyberduck.io/browser/trunk/ftp/src/main/java/ch/cyberduck/core/ftp/FTPClient.java @Override protected void _prepareDataSocket_(final Socket socket) throws IOException { if (socket instanceof SSLSocket) { // Control socket is SSL final SSLSession session = ((SSLS
8 2023-01-02
编程技术问答社区
用FTPClient从 "某些 "服务器下载的图片被破坏了
我需要从Java的FTP服务器下载.png文件. 我有3个不同的服务器,每个服务器都包含一个具有完全相同的.png文件的文件夹. 在服务器1上: 如果我下载了以FTPClient(apache.commons.net.ftp)存储在该服务器上的4686字节的.png文件,则我将获得一个4706字节.png文件,我无法打开它. 如果我使用总指挥官下载它,我会得到一个4686字节.png文件,我可以打开它. 在服务器2和3上: 有了FTPClient和总指挥官,我在两种情况下都获得了4686字节文件,我可以无问题地打开它. 我的代码: FTPClient ftpClient = new FTPClient(); ftpClient.connect("...", PORT); ftpClient.login("...", "..."); ftpClient.enterLocalPassiveMode(); FTPFile[] imageFiles = ftpClie
6 2023-01-01
编程技术问答社区
如何用重用会话连接到FTPS服务器?
我正在使用Android应用程序中的Apache Commons FTP库. 我正在尝试从我的应用程序(使用Android Studio)连接到我的FTPS服务器,然后上传一些文件. 但是,当我想通过从FTPSClient中克服方法_prepareDataSocket_来重复使用会话时,我总是有相同的错误:java.lang.NoSuchFieldException: sessionHostPortCache. 我已经尝试了其他帖子中的代码:如何使用同一TLS会话连接到FTPS服务器? 或 你知道我为什么有这个错误吗? 我正在使用JDK 1.8的Android Studio. 我感谢任何帮助,谢谢. 主代码: String server = "ftp.[HIDDEN]"; int port = 21; String user = "[HIDDEN]"; String pass = "[HIDDEN]"; System.setProperty("jdk
30 2023-01-01
编程技术问答社区
在Java中从FTP服务器递归下载所有文件夹
我想下载(或者您想说同步)FTP服务器与本地目录的整个内容.我已经可以下载文件并在"第一层"上创建目录.但是我不知道如何意识到其中的子文件夹和文件.我只是无法获得工作循环.有人能帮我吗?预先感谢. 到目前为止,这是我的代码: FTPFile[] files = ftp.listFiles(); for (FTPFile file : files){ String name = file.getName(); if(file.isFile()){ System.out.println(name); File downloadFile = new File(pfad + name); OutputStream os = new BufferedOutputStream(new FileOutputStream(downloadFile)); ftp.retrieveFile(name, os);
22 2023-01-01
编程技术问答社区
Apache Commons FTP storeFileStream返回null
我正在尝试使用apache.commons.ftp库中的Android上传文件. 注意:我正在使用storeFileStream,以便可以跟踪上传的进度. ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); InputStream inputStream = new FileInputStream(localFile); OutputStream outputStream = ftpClient.storeFileStream(remoteFile); byte[] buffer = new byte[8192]; int bytesRead; logMessage("Starting to upload file"); while ((bytesRead = inputStream.read(buffer)) != -1) { total += bytesR
16 2022-12-31
编程技术问答社区
使用FTPClient传输文件时出现错误
我在ftp文件到其他机器时得到了以下例外. org.apache.commons.net.io.CopyStreamException: IOException caught while copying. at org.apache.commons.net.io.Util.copyStream(Util.java:119) at org.apache.commons.net.io.Util.copyStream(Util.java:151) at org.apache.commons.net.io.Util.copyStream(Util.java:162) at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:373) at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1360)
8 2022-12-31
编程技术问答社区