【问题标题】:How to retrieve "Last Modified Date" of uploaded file in ASP.Net如何在 ASP.Net 中检索上传文件的“最后修改日期”
【发布时间】:2023-04-09 01:21:01
【问题描述】:

我正在开发一个网站,其中客户端上传一些文档文件,如 doc、docx、htm、html、txt、pdf 等。我想检索上传文件的最后修改日期。我创建了一个处理程序(.ashx)来完成保存文件的工作。

Following is the code:
HttpPostedFile file = context.Request.Files[i];                                 
string fileName = file.FileName;                               
file.SaveAs(Path.Combine(uploadPath, filename));

如您所见,使用 file.SaveAs() 方法保存文件非常简单。但是这个 HttpPostedFile 类没有公开任何属性来检索文件的最后修改日期。

谁能告诉我如何在将文件保存到硬盘之前检索文件的最后修改日期?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    今天您可以使用 HTML5 api 从客户端访问此信息

    //fileInput is a HTMLInputElement: <input type="file" multiple id="myfileinput"> 
    var fileInput = document.getElementById("myfileinput");
    // files is a FileList object (simliar to NodeList) 
    var files = fileInput.files;
    for (var i = 0; i < files.length; i++) {
        alert(files[i].name + " has a last modified date of " + files[i].lastModifiedDate);
    }
    

    Source and more information

    【讨论】:

    • 我必须使用 files[i].lastModified 而不是 files[i].lastModifiedDate 才能使其工作。
    【解决方案2】:

    你不能这样做。 HTTP post 请求不包含有关已上传文件的此信息。

    【讨论】:

    • 是的,HTTP post 请求不包含此信息,但文件本身必须具有此信息(可能在文件标头中)。你能告诉我,有什么办法可以在 c# 中读取这些文件头,或者纠正我,如果我的逻辑是错误的?
    • @Rau,您的问题提到了txt 文件。任意纯文本文件不会有这样的标题。 html 文件可能也不会,除非该信息是由例如添加的。源代码控制系统。在一般情况下,您想要实现的目标似乎是不可能的。
    • @Frédéric Hamidi:谢谢 Frederic,我认为 txt 和 html 文件确实包含这些标题,因为我正在使用 Juploader 上传文件,它确实显示了 txt 和 html 文件的最后修改日期。我认为要获得这些信息,我需要从文件中读取这些标头,这对我来说似乎是合乎逻辑的,但我不知道 C# 该怎么做。
    • @Rua:我可以向你保证,这些文件的标题中没有这些信息。文本文件甚至没有标题。如果您指的是 jUploader,那是一种 Java 解决方案,因此它不受 HTTP 协议的限制。
    【解决方案3】:

    劳,

    您只能在服务器上获取日期。如果您对此感到满意,请尝试:

    string strLastModified = 
        System.IO.File.GetLastWriteTime(Server.MapPath("myFile.txt")).ToString("D");
    

    这里进一步的警告是这个日期时间将是它保存在服务器上的日期,而不是原始文件的日期时间。

    【讨论】:

    • 这个日期会自动成为当前日期(或上传日期)吗?
    • 呃,见上面的修改文本;)
    • 雅吉姆,我知道这一点,但我想在将文件保存到服务器之前检索文件的最后修改日期。据我所知,每个文件都包含这些信息到文件头中,那么有什么方法可以在 C# 中读取这些文件头,如果我的逻辑错误,请纠正我?
    • Rau - 根据我的经验,我从未遇到过这种情况。这并不是说没有办法。如果我发现任何东西,我会更深入地挖掘并更新。但是 http 协议没有指定这种行为,所以它可能是一个客户端 Flash 解决方案(即作为上传控制的一部分),这可能是最好的折衷方案
    • 感谢您的回复,以及您的关注。正如我所说,对此没有直接的答案。当然,需要进入读取文件头的原始级别。如果您有任何详细信息,请告诉我。再次感谢。
    【解决方案4】:

    在您将文件保存到磁盘之前,这是不可能的。

    【讨论】:

    • 那么它最后修改的时间就是当前时间了。
    • 没错。你暴露的问题相当复杂。我正在与几位同事讨论,我们不相信你能做到。 : (
    • 也许...用一点javascript?上传前从de文件中读取的javascript。
    • 感谢您的回复,但据我所知javascript无法访问客户端机器的文件系统(这是一个很大的安全问题)。如果您对此有更多了解,请告诉我?
    【解决方案5】:

    您通常无法获取上次修改日期,因为该日期未存储在文件中。

    操作系统实际上存储了创建、访问和上次修改等文件属性。见Where are “last modified date” and “last accessed date” saved?

    (我说通常是因为某些文件类型(例如图像)可能具有 EXIF 标签数据,例如拍摄照片的日期/时间。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多