Получение даты создания оригинальных файлов при загрузке - PullRequest
1 голос
/ 16 июня 2009

У нас есть процесс, который загружает файлы на наш сайт. Для пользователей стало важно видеть, когда эти файлы были созданы. Я ищу способ извлечь исходную дату создания из HttpPostedFile. Если у кого-то есть идея для меня, я буду очень признателен (я немного озадачен).

Ответы [ 4 ]

3 голосов
/ 16 июня 2009

У вас нет доступа к дате создания файла на клиенте. Вы можете использовать Fiddler для проверки этого. Я полагаю, что единственные данные, которые вы увидите при публикации - это имя файла и тип mime.

1 голос
/ 15 июля 2009

Вот решение, которое я выбрал. После того как вы загрузили файл и сохранили его на сервере, вы можете получить доступ к метаданным в файле (однако это решение в настоящее время применимо только к файлам изображений - там также есть дополнительный код, который можно использовать для отображения всех метаданных для файл, если это необходимо, и я обнаружил странное форматирование даты в метаданных, которые я взломал, что, вероятно, можно сделать чище) ...

                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();
                  }
0 голосов
/ 08 января 2015

Я попробовал подход, упомянутый Брайоном выше, но он дает мне неправильную дату. то есть около 1600 года.

Однако вы можете получить дату для каждого загружаемого файла из свойства lastModifiedDate через свойство files элемента управления FileUpload.

Вот пример 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 отправляет дополнительный параметр

0 голосов
/ 16 июня 2009

Вы просто получаете дату создания файловой системы из 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);
...