我正在我的android应用程序中使用Apache Commons FTP库
我正在通过FTPS进行连接,虽然它完美地连接到服务器,但我在传输文件时遇到了问题。
由于安全原因,订购应用程序的客户端请求在使用PROT P时请求数据连接上的TLS会话恢复。
TransferImagenesFTP.ftpClient = new FTPSClient();
TransferImagenesFTP.ftpClient.connect(InetAddress.getByName("XXX_XXX_XX_X"), 26);
TransferImagenesFTP.ftpClient.enterLocalPassiveMode();
TransferImagenesFTP.ftpClient.setBufferSize(1024000);
TransferImagenesFTP.ftpClient.login("xxxxxx", "zzzzzz");
TransferImagenesFTP.ftpClient.execPROT("P");
TransferImagenesFTP.ftpClient.type(FTP.BINARY_FILE_TYPE);
您可以试试下面的代码,我希望它也能适用于您的情况。
代码使用Apache Commons vsf2通过安全ftp连接(SFTP)上载文件
try {
String filepath = "<FILE PATH>";
String serverAddress = "<FTP SERVER ADDRESS>";
String userId = "<FTP USER ID>";
String password = "<FTP PASSWORD>";
String remoteDirectory = "<FTP DIRECTORY TO UPLOAD TO>";
String keyPath = "<PATH TO YOUR KEY>";
String passPhrase = "<PASSWORD FOR YOUR KEY>";
File file = new File(filepath);
if (!file.exists())
throw new RuntimeException("Error. File not found");
//Initializes the file manager
StandardFileSystemManager manager = new StandardFileSystemManager();
manager.init();
//Setup our SFTP configuration
FileSystemOptions opts = new FileSystemOptions();
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);
// Create local file object
FileObject localFile = manager.resolveFile(file.getAbsolutePath());
// Create remote file object
FileObject remoteFile = manager.resolveFile(createConnectionString(serverAddress, userId, password, keyPath, passPhrase, fileToFTP), createDefaultOptions(keyPath, passPhrase));
// Copy local file to sftp server
remoteFile.copyFrom(localFile, Selectors.SELECT_SELF);
System.out.println("File upload successful");
}
catch (Exception ex) {
ex.printStackTrace();
return false;
}
finally {
manager.close();
}
您可以在Apache Commons VFS文档中查看更多信息
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.Socket;
import java.util.Locale;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSessionContext;
import javax.net.ssl.SSLSocket;
import org.apache.commons.net.ftp.FTPSClient;
import com.google.common.base.Throwables;
public class PatchedFTPSClient extends FTPSClient {
@Override
protected void _prepareDataSocket_(final Socket socket) throws IOException {
if(socket instanceof SSLSocket) {
final SSLSession session = ((SSLSocket) _socket_).getSession();
final SSLSessionContext context = session.getSessionContext();
try {
final Field sessionHostPortCache = context.getClass().getDeclaredField("sessionHostPortCache");
sessionHostPortCache.setAccessible(true);
final Object cache = sessionHostPortCache.get(context);
final Method method = cache.getClass().getDeclaredMethod("put", Object.class, Object.class);
method.setAccessible(true);
final String key = String.format("%s:%s", socket.getInetAddress().getHostName(),
String.valueOf(socket.getPort())).toLowerCase(Locale.ROOT);
method.invoke(cache, key, session);
} catch(Exception e) {
throw Throwables.propagate(e);
}
}
}
}
使用此修改后的代码段。
TransferImagenesFTP.ftpClient = new PatchedFTPSClient();
TransferImagenesFTP.ftpClient.connect(InetAddress.getByName<SERVER-ADDRESS>"), 26);
TransferImagenesFTP.ftpClient.login("<USERNAME>", "<PASSWORD>");
TransferImagenesFTP.ftpClient.execPBSZ(0);
TransferImagenesFTP.ftpClient.execPROT("P");
TransferImagenesFTP.ftpClient.enterLocalPassiveMode();
//Now use the FTP client to upload the file as usual.
希望这将为您工作,并将解决您的问题。
问题内容: 我一直在寻找解决方案,但是已经找不到了。 基本上,我想从Android设备上将文件上传到http网站。但是,我不知道如何执行此操作。我在设备上使用Java,并且我想在服务器端使用PHP。我只想上传文件,而不想在服务器上做任何花哨的事情。 谁能提供代码和/或指向我所需的链接?我对此几乎没有经验,也很茫然。 谢谢,NS PS。我没有PHP编码经验。 问题答案: 是的,所以我找到了Java方
我想将文件上载到ftps服务器。下面的代码适用于10KB这样的小文件。但我需要上传5-10 MB的文件。错误出现在下面的错误行中。有人能帮我吗?下面是我尝试的代码。有没有更好的方法? 错误行 代码 错误消息 org.apache.commons.net.io.CopyStreamException: IOException在复制时捕获。在org.apache.commons.net.io.Util
我需要将文件从远程服务器复制到本地服务器,然后使用JMETER使用SSH SFTP进行尝试。我提供了登录凭据,并在“文件传输”部分中,选择了操作 - PUT源路径 - 远程路径( /ftp / xxx / yyy)目标 - 本地路径。 收到错误为` Java . io . file not found exception:C:\ Apache-jmeter-5 . 1 . 1 \ bin \ FT
我正在尝试访问我在ftps服务器中创建的路径中的一个文件夹,但它没有返回任何东西,它正在连接但没有返回任何东西,如果我将服务器配置更改为ftp,它可以工作。我使用的是FileZilla服务器,其配置如上所示。 SSL/TLS 服务器关于连接的日志收到一条消息,我不知道它是否有用: 227进入被动模式 列表 NLST 需要521个PROT P 退出 知道怎么了吗? 谢谢大家!
问题内容: 我设法将文件从客户端大块上传到服务器,但是现在我想实现相反的方式。不幸的是,此部分缺少官方模块页面上的文档。 我要执行以下操作: 向服务器发出流和带有文件名的“下载”事件 服务器应创建一个readstream并将其通过管道传输到客户端发出的流 当客户端到达流时,将出现一个下载弹出窗口,并询问将文件保存在何处 我不想使用简单的文件超链接的原因令人困惑:服务器上的文件已加密并重命名,因此我
问题内容: 是否可以使用ajax将文件从浏览器升级到FTP服务器? 问题答案: 不会。浏览器不提供允许从JavaScript写入FTP的API。 您可以将文件发布到HTTP端点,然后使用服务器端代码将其推送到FTP服务器。