Frage

Wir haben einen Prozess, in dem Dateien auf unsere Website hochgeladen werden. Für die Benutzer ist es wichtig geworden, zu erkennen, wann diese Dateien erstellt wurden. Ich suche nach einer Möglichkeit, das Original -Erstellendatum aus der httppostedfile zu extrahieren. Wenn jemand eine Idee für mich hat, würde ich es wirklich zu schätzen wissen (ich bin zu diesem Zeitpunkt ein bisschen ratlos).

War es hilfreich?

Lösung 2

Hier ist die Lösung, mit der ich gekommen bin. Sobald Sie die Datei hochgeladen und auf dem Server gespeichert haben, können Sie in der Datei auf die Metadaten zugreifen Die Datei bei Bedarf und ich fand ein seltsames Datum, das in den Metadaten geformt wurde, die ich umgegangen bin und das wahrscheinlich sauberer gemacht werden könnte) ...

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

Andere Tipps

Sie haben keinen Zugriff auf das Datum, an dem die Datei auf dem Client erstellt wurde. Sie können Fiddler verwenden, um dies zu validieren. Ich glaube, die einzigen Daten, die Sie sehen werden, sind der Dateiname und der MIME -Typ.

Ich habe den von Bryon oben erwähnten Ansatz ausprobiert, aber er gibt mir ein falsches Datum. dh etwas um das Jahr 1600.

Sie können jedoch das Datum für jede (zu sein) hochgeladene Datei aus der Eigenschaft "LastModifiedDate" über die Dateieneigenschaft von DateiEUpload Control erhalten.

Hier ist das Beispiel HTML/JavaScript dafür. Ich habe es genommen von:

http://www.w3schools.com/jsref/tryit.asp?FileName=tryjsref_FileUpload_filesund modifizierte es ein wenig für unser Bedürfnis. Hinweis: Bitte lesen Sie meinen Kommentar unten nach diesem HTML /JavaScript -Snippet.

<!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>

Sie können diese Informationen beispielsweise als zusätzlicher Parameter über die Upload -Steuerung von JQuery -Dateien übergeben. Hier ist der Link, der dies demonstriert:

JQuery -Datei -Upload -Modul Senden Sie zusätzlichen Parameter

Sie greifen einfach das Dateisystemerstellungsdatum aus der httppostedFile :: Dateiname.

So etwas:

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top