2009-06-15 7 views
1

Nous avons mis en place un processus qui télécharge les fichiers sur notre site Web. Il est devenu important pour les utilisateurs de voir quand ces fichiers ont été créés. Je suis à la recherche d'un moyen d'extraire la date de création d'origine à partir de HttpPostedFile. Si quelqu'un a une idée pour moi, je l'apprécierais vraiment (je suis un peu perplexe à ce point).Obtenir les fichiers d'origine créer la date lors du téléchargement

+0

Si vous utilisez FTP/SCP pour copier les fichiers sur le site, vous pouvez définir une option pour préserver la création du fichier d'origine date –

Répondre

1

Voici la solution que j'ai trouvée. Une fois que vous avez téléchargé le fichier et l'avez enregistré sur le serveur, vous pouvez accéder aux métadonnées du fichier (cette solution ne s'applique toutefois qu'aux fichiers image). Il existe également du code supplémentaire qui peut être utilisé pour afficher les métadonnées entières le fichier si nécessaire, et je l'ai trouvé un peu bizarre formating date dans les métadonnées que je piraté autour qui pourrait probablement être fait plus propre) ...

   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

Vous venez de saisir la date de création du système de fichiers à partir de HttpPostedFile :: FileName.

Somthing comme ceci:

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

Cela ne fonctionne que si le fichier Le téléchargement provient du serveur Web lui-même. – David

+0

Je vois, j'ai mal lu comme la date de création du fichier sur le serveur, pas le client. –

+0

Ouais, je m'étais d'abord dirigé sur ce chemin, mais ce que vous finissez avec est le 31/12/1600. –

3

Vous n'avez pas accès à la date de création du fichier sur le client. Vous pouvez utiliser Fiddler pour le valider. Je crois que les seules données que vous verrez postées sont le nom de fichier et le type mime.

0

J'ai essayé l'approche mentionnée par Bryon ci-dessus, mais il me donne une date incorrecte . C'est à peu près tout autour de l'année 1600.

Vous pouvez cependant obtenir la date pour chaque fichier (à être) téléchargé depuis la propriété 'lastModifiedDate' via la propriété filesUpload control files.

Voici l'exemple HTML/Javascript pour cela. Je l'ai pris de:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_fileupload_files et l'a modifié un peu pour notre besoin. Note: Veuillez lire mon commentaire ci-dessous après cet extrait 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> 

Vous pouvez transmettre ces informations en tant que paramètre supplémentaire à l'aide du contrôle de téléchargement de fichier jQuery par exemple. Voici le lien démontrant cette:

jquery file upload module sending extra parameter

Questions connexes