3

我们有一个将文件上传到我们网站的流程。对于用户来说,能够看到这些文件的创建时间变得很重要。我正在寻找一种从 HttpPostedFile 中提取原始创建日期的方法。如果有人对我有想法,我会非常感激(此时我有点难过)。

4

4 回答 4

3

您无权访问在客户端上创建文件的日期。您可以使用 Fiddler 来验证这一点。我相信您会看到发布的唯一数据是文件名和 mime 类型。

于 2009-06-15T20:36:58.363 回答
3

我尝试了上面 Bryon 提到的方法,但它给了我不正确的日期。即大约在 1600 年左右。

但是,您可以通过 FileUpload 控件的 files 属性从“lastModifiedDate”属性中获取每个(待)上传文件的日期。

这是它的示例 HTML/Javascript。我把它取自:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_fileupload_files 并根据我们的需要对其进行了一些修改。注意:请在此 HTML /Javascript 片段之后阅读我的评论。

<!DOCTYPE html>
<html>
<body onload="myFunction()">

<input type="file" id="myFile" multiple size="50" onchange="myFunction()">

<p id="demo"></p>

<script>
function myFunction(){
    var x = document.getElementById("myFile");
    var txt = "";
    if ('files' in myFile) {
        if (x.files.length == 0) {
            txt = "Select one or more files.";
        } else {
            for (var i = 0; i < x.files.length; i++) {
                txt += "<br><strong>" + (i+1) + ". file</strong><br>";
                var file = x.files[i];
                if ('name' in file) {
                    txt += "name: " + file.name + "<br>";
                }
                if ('size' in file) {
                    txt += "size: " + file.size + " bytes <br>";
                }
                if ('lastModifiedDate' in file) {
                    txt += "lastModifiedDate: " + file.lastModifiedDate.toString();
                }
            }
        }
    } 
    else {
        if (x.value == "") {
            txt += "Select one or more files.";
        } else {
            txt += "The files property is not supported by your browser!";
            txt  += "<br>The path of the selected file: " + x.value; // If the browser does not support the files property, it will return the path of the selected file instead. 
        }
    }
    document.getElementById("demo").innerHTML = txt;
}
</script>

<p><strong>Tip:</strong> Use the Control or the Shift key to select multiple files.</p>

</body>
</html>

例如,您可以使用 jQuery 文件上传控件将此信息作为附加参数传递。这是演示这一点的链接:

jquery文件上传模块发送额外参数

于 2015-01-08T10:43:04.853 回答
1

这是我最终得到的解决方案。上传文件并将其保存到服务器后,您可以访问文件中的元数据(但是,此解决方案目前仅适用于图像文件 - 那里还有一些额外的代码可用于显示整个元数据如果需要该文件,我在元数据中发现了一些奇怪的日期格式,我修改了这些格式可能会更干净)......

                System.IO.FileInfo fileInfo = new System.IO.FileInfo(UPLOAD_DIRECTORY + file.FileName);
                if (!fileInfo.Exists)
                {
                    break;
                }
                else
                {

                  //Check for metadata original create date
                  if (_imageFormats.Contains(fileInfo.Extension.ToLower()))
                  {
                    Stream fileStream = fileInfo.OpenRead();
                    System.Drawing.Image image = new System.Drawing.Bitmap(fileStream);

                    // Get the PropertyItems property from image.
                    System.Drawing.Imaging.PropertyItem[] propItems = image.PropertyItems;

                    // For each PropertyItem in the array, display the ID, type, and 
                    // length.
                    int count = 0;
                    string s1 = null;
                    string dateID = null;
                    foreach (System.Drawing.Imaging.PropertyItem propItem in propItems)
                    {
                      s1 += "Property Item " + count.ToString() + "/n/r";

                      s1 += "iD: 0x" + propItem.Id.ToString("x") + "/n/r";
                      if (("0x" + propItem.Id.ToString("x")) == PROPERTYTAGEXIFDTORIG)
                      {
                        dateID = count.ToString();
                      }
                      s1 += "type: " + propItem.Type.ToString() + "/n/r";

                      s1 += "length: " + propItem.Len.ToString() + " bytes" + "/n/r";

                      count++;
                    }
                    // Convert the value of the second property to a string, and display 
                    // it.
                    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
                    if (dateID != null)
                    {
                      string date = encoding.GetString(propItems[int.Parse(dateID)].Value);
                      date = date.Replace("\0", string.Empty);
                      string[] datesplit = date.Split(' ');
                      string newDate = datesplit[0].Replace(":", "-") + " " + datesplit[1];
                      originalCreateDate = DateTime.Parse(newDate);
                    }
                    fileStream.Close();
                  }
于 2009-07-15T15:21:36.960 回答
-2

您只需从 HttpPostedFile::FileName 中获取文件系统的创建日期。

像这样的东西:

HttpFileCollection MyFileColl = Request.Files;
HttpPostedFile MyPostedFile = MyFileColl.Get(0);
String filename = MyPostedFile.FileName;
String creationTime;

if (File.Exists(fileName)) 
{
      creationTime = File.GetCreationTime(fileName).ToString(); 
}
System.writeLine(creationTime);
于 2009-06-15T20:17:11.343 回答