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

时间:2016-03-31 10:27:36

标签: c# .net ftp

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

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

以下是我的一些想法:

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

1 个答案:

答案 0 :(得分:2)

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

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

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

  • 此处起草了MFMTMFCThttps://tools.ietf.org/html/draft-somers-ftp-mfxx-04
  • RFC 3659中定义了MDTM,以使用MDTM filename语法检索文件修改时间戳。但是许多FTP服务器支持替代(非标准)语法MDTM filename timestamp(即与提议的MFMT相同)以更新修改时间戳。

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

您必须使用第三方库。

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

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

// 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及更新版本)甚至可以generate the C# code for you

(我是WinSCP的作者)