Java+apachecommons-Net:无需下载即可读取FTPFile
使用ApacheCommonsNet3.2,我的程序连接到FTP服务器并从中下载文件 但是,它应该能够读取服务器上的文件,而无需下载它们 这可能吗 只是服务器包含大量的个人信息、SSN、电话、电子邮件等,只有具有正确密码的特定人员才能访问这些信息 没有人应该能够从服务器下载任何东西,至少没有我的程序中授予的最高级别权限 到目前为止,我有一个FTPFile[],其中包含服务器上的所有数据文件 我想对他们进行循环,看看他们是否有当前用户名,这意味着他们可以查看这个人/文件,如果有,将他们的数据添加到ArrayList中 有什么建议吗Java+apachecommons-Net:无需下载即可读取FTPFile,java,apache-commons-net,readfile,Java,Apache Commons Net,Readfile,使用ApacheCommonsNet3.2,我的程序连接到FTP服务器并从中下载文件 但是,它应该能够读取服务器上的文件,而无需下载它们 这可能吗 只是服务器包含大量的个人信息、SSN、电话、电子邮件等,只有具有正确密码的特定人员才能访问这些信息 没有人应该能够从服务器下载任何东西,至少没有我的程序中授予的最高级别权限 到目前为止,我有一个FTPFile[],其中包含服务器上的所有数据文件 我想对他们进行循环,看看他们是否有当前用户名,这意味着他们可以查看这个人/文件,如果有,将他们的数据添加到
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Arrays;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class Server {
private static final String server = "/server";
private static final String host = "00.000.0.0";
private static final String user = "username";
private static final String pass = "password";
private static List <FTPFile> data;
private static FTPClient ftp = new FTPClient ();
public static void load (String folder) {
try {
// Connect to the SERVER
ftp.connect(host, 21);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
System.out.println("Could not connect to the server.");
return;
}
// Login to the SERVER
ftp.enterLocalPassiveMode();
if (!ftp.login(user, pass)) {
System.out.println("Could not login to the server.");
return;
}
// Get DATA from the SERVER
System.out.println(server + "/" + folder);
data = Arrays.asList(ftp.listFiles(server + "/" + folder));
System.out.println(data.size());
for (int f = 0; f < data.size(); f++)
System.out.println(data.get(f).getName());
// Disconnect from the SERVER
ftp.logout();
ftp.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String read (FTPFile file) {
try {
String name = file.getName();
File tempFolder = new File ("temp/" + name);
tempFolder.mkdirs();
// Create a TEMPORARY DATA FILE
File tempFile = new File (tempFolder.getAbsolutePath() + "/data");
System.out.println(tempFile.getAbsolutePath());
tempFile.createNewFile();
tempFile.deleteOnExit();
// Get ready to DOWNLOAD DATA from the SERVER
FileOutputStream out = new FileOutputStream (new File (name));
ftp.connect(host, 21);
ftp.login(user, pass);
// DOWNLOAD and DISCONNECT
ftp.retrieveFile(name, out);
out.close();
ftp.logout();
ftp.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return ""; // This should return a String with data read from the file
}
}
不,如果不先下载文件,就无法通过ftp从客户端读取文件
您必须在ftp-服务器端安装软件。如果您想在文件中读取内容,则必须下载文件,即将其内容从服务器传输到客户端。当您仅限于客户端解决方案时,没有办法解决此问题 通常,只检查客户端中的用户权限是个坏主意。如果恶意用户具有正确的凭据来访问可以从客户端提取的服务器,则他可以绕过客户端授权,使其无效 用户的身份验证和授权应始终发生在服务器端
在您的示例中,您可以考虑在FTP服务器上创建不同的用户和适当的访问权限,读写文件/目录。
你能在电影屏幕上看一部电影而不通过投影仪发光吗?你能在堆栈上问一个问题而不被冷嘲热讽吗?@RichYoung这个问题真的与Java或Apache Commons Net无关。这就是FTP的工作方式。协议中没有列出文件内容的规定。这毕竟是文件传输协议: