2009-06-15 3 views
1

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

+0

Если вы используете FTP/SCP для копирования файлов на веб-сайт, вы можете установить параметр для сохранения исходного создания файла дата –

ответ

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(); 
        } 
-1

Вы просто получаете дату создания файловой системы из HttpPostedFile :: FileName.

Somthing так:

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); 
+2

это работает только, если вам файл загрузка происходит с самого веб-сервера. – David

+0

Я вижу, я неправильно читаю дату создания файла на сервере, а не клиент. –

+0

Да, я изначально возглавлял этот путь, но в итоге у вас 12/31/1600. – 2009-06-16 12:17:25

3

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

0

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

Вы можете, однако, получить дату для каждого загружаемого файла из свойства lastModifiedDate через свойство файлов 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 file upload module sending extra parameter