我正在尝试设置一个 SFTP 服务器,运行 Ubuntu Server 11.04。我安装了 openssh-server 以提供 SSH 访问。我试图做的是让文件上传带有后缀(.filepart 或其他),该后缀将在传输完成后被删除。
流程思路是:
- 用户上传
cat.jpg
- 服务器开始
cat.jpg.filepart
在目标目录中写入 - 上传完成后,服务器将删除之前的
cat.jpg
(如果有)并重命名cat.jpg.filepart
为cat.jpg
这是为了确保不完整的文件上传不会覆盖现有文件。有什么想法可以做到这一点吗?
谢谢
答案1
ProFTPD 可以通过以下方式支持 SFTPmod_sftp模块,和可以做到你所描述的HiddenStores
指令;此功能支持 FTP 和 SFTP 上传。
全面披露:我是 ProFTPD 和 mod_sftp 的作者。
答案2
OpenSSH 服务器不支持此功能。
如果有帮助的话,WinSCP SFTP 客户端可以从客户端执行此操作。
看https://winscp.net/eng/docs/resume#automatic
默认情况下,仅对超过 100 KB 的文件使用.filepart
后缀,但您可以将其配置为对任何文件使用它。
看https://winscp.net/eng/docs/ui_pref_resume
(我是 WinSCP 的作者)
答案3
使用 rsync (通过 ssh)。它旨在确保即使复制中途失败也不会破坏现有文件。
答案4
如果你能写 Perl,你可以在其上编写自定义的 SFTP 服务器网络::SFTP::服务器/网络::SFTP::服务器::FS。
更新: 看sftp-服务器-原子-put.pl