是否可以使服务器上的进程像文件系统一样与FTP交互?

是否可以使服务器上的进程像文件系统一样与FTP交互?,ftp,filesystems,Ftp,Filesystems,我想做的是在我的服务器上运行一个类似FTP服务器的进程。所以人们可以通过“FTP”上传东西,但实际上,我正在运行的是一个程序,它允许我将有关该文件的信息放入数据库,而不是真正将文件放在他们说要去的地方 例如,网站模板。我的服务的一个用户希望为他们的客户机提供他们正在使用的模板,但希望通过FTP将其上传到他们的文本编辑器中。但我想将模板数据存储在数据库中,对其进行处理以查找相关信息,然后将其存储在我想存储的位置,但仍将其显示为用户为其放置的位置 可能会非常困难,但有人知道这是否可能吗?这是非常可能

我想做的是在我的服务器上运行一个类似FTP服务器的进程。所以人们可以通过“FTP”上传东西,但实际上,我正在运行的是一个程序,它允许我将有关该文件的信息放入数据库,而不是真正将文件放在他们说要去的地方

例如,网站模板。我的服务的一个用户希望为他们的客户机提供他们正在使用的模板,但希望通过FTP将其上传到他们的文本编辑器中。但我想将模板数据存储在数据库中,对其进行处理以查找相关信息,然后将其存储在我想存储的位置,但仍将其显示为用户为其放置的位置


可能会非常困难,但有人知道这是否可能吗?

这是非常可能的

FTP协议相对简单

您只是在创建一个专门的FTP服务器(或“守护进程”)


从任何开源FTP服务器开始,然后开始定制。示例:

我以前没有做过这个特定的活动,但我认为这是使用(linux用户空间文件系统)实现这个功能的完美选择。然后,您应该能够使用标准的ftp服务器,该服务器随后会写入您的用户空间文件系统,您只需提供适当的行为


我知道有可用的,可能还有其他可用的…

这并不像看上去那么简单。如果您运行的服务器只支持HTTP,那么建立到它的ftp连接将不容易,除非您对实现进行黑客攻击以支持ftp


如果您将ftp发送到url而不是使用http,则服务器将以ftp协议获取请求,接收请求的端口必须能够处理请求所使用的协议。大多数服务器实现都支持ftp,但这会将文件ftp发送到某个目录。将文件上载到某个目录后,您可以使用守护进程来解析并将它们放入数据库,然后删除它们。

最好安装一个现有的ftp服务器,并编写一个脚本或进程来监视文件系统中的新文件和更新文件。一旦监视进程看到更新,它就会适当地处理它


很多ftp服务器都有丰富的功能,可以抵御攻击,如果您编写自己的ftp服务器,您将不得不担心这些攻击。vsftpd和proftpd是两个值得一提的OSS ftp服务器。

ftp仅定义传输操作的细节。实际存储的处理方式取决于编写服务器的人。这使得它与文件系统无关,因此可以对Unix、Windows、VMS、TRS-DOS等使用相同的协议

一种选择是找到在您选择的平台上运行的现有服务器的源代码,然后“替换”处理文件I/O的调用

dbfs.h:

dbfs.c:

现有服务器代码:


#包括
#包括
#包括“dbfs.h”/*”替换“系统定义的文件I/O例程”*/

这不是我所说的“琐碎”。问题是“可能吗?”。答案很简单,“是的,这是可能的”。而且,因为有完整的源代码,所以进行更改很简单。我不确定你的“琐事”的门槛在哪里,但写了定制的FTP客户端后,我可以说它非常非常简单。从资料来源来看,这是微不足道的。你说的其实很对,我还没有读过RFC959,现在我有了它,它在里面解释了同样的事情。实际上,我已经开始用Ruby制作服务器,并且已经取得了很大的进展。它完全可以工作,但我从早上10点左右一直在做它,直到。。。现在是12:38,我正在添加一些新功能。但是它工作得很好,做了所有正常的事情,有点稳定,但是仍然需要修复超时。过来看

#define open db_open
#define write db_write
#define close db_close

int open(...)
{
    /* create a memory buffer */
}

ssize_t write(...)
{
    /* write data to memory buffer */
}

int close(...)
{
    /* execute SQL insert statement to save memory buffer to db */
}

#include <fcntl.h>
#include <unistd.h>
#include "dbfs.h" /* "replaces" system-defined file I/O routines */