Question

Nous avons un processus en place qui télécharge des fichiers sur notre site Web. Il est devenu important pour les utilisateurs de pouvoir voir quand ces fichiers ont été créés. Je cherche un moyen d'extraire la date de création originale de la HttpPostedFile. Si quelqu'un a une idée pour moi je l'apprécie vraiment (je suis un peu perplexe à ce point).

Était-ce utile?

La solution 2

Voici la solution que je fini avec. Une fois que vous avez téléchargé le fichier et enregistré sur le serveur, vous pouvez accéder aux métadonnées dans le fichier (cette solution cependant, ne s'applique actuellement aux fichiers d'image - il y a aussi un code supplémentaire là-dedans qui pourrait être utilisé pour afficher les métadonnées entier pour 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();
                  }

Autres conseils

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

J'ai essayé l'approche mentionnée par Bryon ci-dessus, mais il me donne une date incorrecte. i.e. quelque chose autour de l'année 1600.

Vous pouvez cependant obtenir la date de chaque (être) fichier téléchargé à partir de la propriété « LastModifiedDate » via la propriété des fichiers de contrôle FileUpload.

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

http://www.w3schools.com/jsref/tryit.asp ? filename = tryjsref_fileupload_files et modifié un peu pour nos besoins. Note:. S'il vous plaît lire mon commentaire ci-dessous après HTML / Javascript extrait

<!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 cette information comme un paramètre supplémentaire à l'aide de contrôle de téléchargement de fichiers jQuery par exemple. Voici le lien démontrant ceci:

module de téléchargement de fichier jquery envoyer paramètre supplémentaire

Vous prenez juste la date de création du système de fichiers de la 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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top