2

我有一个允许用户上传文件的 ftp 客户端。我想确定哪个用户/主机/...上传了该文件。所有人都使用相同的用户名上传文件。唯一的区别是他们使用不同的计算机。

有什么方法可以跟踪哪个用户上传了该文件?

public static void uploadFileToServerViaSunFtp(final String source,final JPanel panel, final JTextArea textArea)
{
    SwingWorker uploadWorker = new  SwingWorker<Boolean,String>()
    {
        @Override
        protected Boolean doInBackground() throws Exception
        {
            publish("File "+FilenameUtils.getName(source).concat(" starts uploading on ") + String.valueOf(Calendar.getInstance().getTime() + "\n"));
            boolean success = false;
            FtpClient client;
            try
            {
                client = new FtpClient(server.getFtpServer());
                client.login(server.getUsername(), server.getPassword());
                client.cd("PC");
                client.binary();
                int BUFFER_SIZE = 10240;
                byte[] buffer = new byte[BUFFER_SIZE];

                File f = new File(source);
                FileInputStream in = new FileInputStream(source);
                // *** If uploading take long time, progress bar will show up ***
                InputStream inputStream = new BufferedInputStream(
                        new ProgressMonitorInputStream(panel, "Uploading " + f.getName(), in));
                OutputStream out = client.put(f.getName());
                while (true) {
                    int bytes = inputStream.read(buffer);
                    if (bytes < 0)
                        break;
                    out.write(buffer, 0, bytes);
                }
                out.close();
                in.close();
                inputStream.close();
                client.closeServer();
                success = true;
            }
            catch (IOException e)
            {
                OeExceptionDialog.show(e);
            }
            return success;
        }

        @Override
        protected void done()
        {
            super.done();
            try {
                if(get())
                    textArea.append("File "+FilenameUtils.getName(source).concat(" Uploaded successfully.\n"));
        }
    };
    uploadWorker.execute();
}
4

2 回答 2

5

存储在 FTP 服务器上的文件具有所有者 ( oid) 和组 ( gid)。

登录 FTP 服务器的目的是让您获得身份验证和授权。因此,对于将上传文件的每个用户,您应该有不同的用户,如“不同的用户名”。

让所有用户使用相同的用户名是没有意义的,因为这将无法区分。

检查IP地址完全没有意义。我这么说的原因是任何人都可以劫持一个 IP 地址,如果他们在你的本地网络上的话。这里几乎没有验证,您不能相信您的本地 DNS 会为您完成这项工作。

只需使用不同的用户名。

于 2012-06-25T07:28:48.327 回答
2

您的客户端代码与问题有何关联?当然,服务器知道在上传文件之前登录的用户的名称以及从哪个 IP 地址建立连接(除非 IP 地址被代理/NAT 屏蔽)。此外,上传文件的属性通常设置为具有与上传文件的用户的所有者和组相对应的 Unix 上的所有者和组或 Windows 上的安全属性。

于 2012-06-25T07:08:57.877 回答