上传到FTP时保留图像创建日期

所以我正在为我的家人制作一个网站,我们可以上传我们的图片并查看它们,但网站的一个重要特征是按日期排序,以便例如我的阿姨在我母亲的生日那天拍照并且我也有拍摄照片,我们上传他们将被添加到同一张专辑等的图像。

我意识到通过浏览器上传时无法保留日期。 所以我将制作一个仅用于上传图片的小程序。 我有一台FTP服务器正在运行,但是当我上传图像时,日期将更改为当前日期时间。 我找到了为什么这样做的答案所以现在我正在寻找一种方法来保存上传到FTP的日期。

这是我的一些想法:

  1. 如果程序将文件添加到zip文件并上传该zip文件,它们将保留日期,但这意味着我必须在服务器上放置解压缩包的内容。
  2. 当图像上传时,程序从原始图像中提取创建的日期并将其添加到它也上传的文本文件中,但这又需要服务器上的程序改变上载的图像创建日期。
  3. 也许我上传图像,然后从客户端更改上传的图像创建日期?

  1. 也许我上传图像,然后从客户端更改上传的图像创建日期?

在FTP协议中,使用MFMTMDTM命令更新文件修改时间戳,或使用MFMT更新文件创建时间戳,具体取决于您的FTP服务器支持哪些。

实际上它们都没有标准化。

  • MFMTMFMT在这里起草: https : MFMT
  • MDTM在RFC 3659中定义,以使用MDTM filename语法检索文件修改时间戳。 但是许多FTP服务器支持替代(非标准)语法MDTM filename timestamp (即与建议的MFMT相同)以更新修改时间戳。

虽然.NET框架中的本机FTP实现( FtpWebRequestWebClient包装器)不支持任何这些。

您必须使用第三方库。

例如, WinSCP .NET程序集会自动为任何上载(或下载)保留修改时间戳,而无需任何其他代码。

上传文件的一个简单示例代码(隐式保留修改时间戳):

 // Setup session options SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Ftp, HostName = "example.com", UserName = "user", Password = "mypassword", }; using (Session session = new Session()) { // Connect session.Open(sessionOptions); // Upload session.PutFiles(@"d:\toupload\image.jpg", "/home/user/").Check(); } 

有关详细信息,请参阅Session.PutFiles

最新版本的WinSCP GUI FTP客户端(5.9及更新版本)甚至可以为您生成C#代码 。

(我是WinSCP的作者)