我想要做的是在我的服务器上运行一个充当FTP服务器的进程。所以人们可以通过“FTP”上传内容,但实际上它是我正在运行的程序,它允许我将有关该文件的信息放在数据库中,而不是真正将文件放在他们说他们要去的地方。
E.g。网站模板。我的服务的用户想要为他们的客户提供他们正在处理的模板,但是想要在他们的文本编辑器中通过FTP上传它。但我希望将模板数据存储在数据库中,处理它以找出有关它的内容然后将其存储在我想要的位置,但仍然将其显示为人们为其设置的位置。
可能会非常困难,但有人知道这是否可能?
答案 0 :(得分:1)
这很简单。
FTP协议相对简单。
您只是创建一个专门的FTP服务器(或“守护程序”)。
从任何开源FTP服务器开始,然后开始自定义。示例:http://code.google.com/p/pyftpdlib/
答案 1 :(得分:0)
我之前没有做过这个特定的活动,但我认为这是用LUFS(linux用户空间文件系统)实现这个的完美候选者。然后,您应该能够使用标准的ftp服务器,然后写入您的用户空间文件系统,您只需要提供适当的行为。
我知道有python bindings可用,可能还有其他人在附近......
答案 2 :(得分:0)
它看起来并不那么简单。如果你运行的服务器只支持HTTP,那么除非你破解了支持ftp的实现,否则建立一个ftp连接并不容易。
如果你ftp到一个url而不是使用http,那么服务器在ftp协议中获取请求,并且接收请求的端口必须能够处理请求所来自的协议。大多数服务器实现都支持FTP但是将文件ftp到某个目录。将文件上传到目录后,可以使用守护进程解析并将它们放入数据库中,然后将其删除。
答案 3 :(得分:0)
安装现有的ftp服务器并编写一个脚本或进程来监视文件系统以获取新的和更新的文件可能会更好。一旦观看过程看到更新,它就会适当地处理它。
大量的ftp服务器功能丰富且能够抵御攻击,如果您自己编写,则必须担心这些攻击。 vsftpd,proftpd是值得一提的两个OSS ftp服务器。
答案 4 :(得分:0)
FTP仅定义传输操作的细节。如何处理实际存储取决于谁在编写服务器。这允许它与文件系统无关,因此可以对Unix,Windows,VMS,TRS-DOS等使用相同的协议。
一种选择是找到在您选择的平台上运行的现有服务器的源,并“替换”处理文件I / O的调用。
dbfs.h:
#define open db_open
#define write db_write
#define close db_close
dbfs.c:
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 */