Artikel - Detailansicht

Icon Aktuelles Zugriff auf das lokale Filesystem

Wenn es allgemein auch nicht üblich ist, bei Webapplicationen auf die lokale Festplatte zuzugreifen, so ist es doch hin und wieder sehr praktisch und bietet gerade im Intranet viel Komfort. Der Zugriff aber birgt immer auch ein Risiko für den User und man sollte gerade im Internet bedenken, dass nicht jeder Surfer den Zugriff zulassen wird.

Das man mit dem Browser aus einer Webseite heraus auf das lokale Filesystem zugreifen kann ermöglicht eine Technologie von Microsoft, bekannt/brüchtigt unter dem Namen ActiveX. ActiveX ist ein Teil der COM-Technologie (Component Objekt Model - früher OLE genannt) von Microsoft und steht für verschiedene Möglichkeiten, aktiven Programmcode in Webseiten unterzubringen.
Hauptbestandteil dieser Technologie sind die ActiveX-Controls, die sich ähnlich wie Applets in Webseiten einbinden und per Script steuern lassen, ohne jedoch den Einschränkungen von Applets zu unterliegen. Deshalb ist es auch mit Hilfe eines ActiveX-Control relativ einfach, das lokale Datei-System zu benutzen. Diese Möglichkeit soll hier an einem kleinem Beispiel erläutern und vorgeführt werden.

ActiveX-Komponenten lassen sich im allg. nur im Internet-Explorer von Microsoft einbinden, für Netscape ist allerdings ein Plugin erhältlich: www.ncompasslabs.com. Man sollte aber nicht vergessen im Internet Explorer die Ausführung von ActiveX-Komponenten zu erlauben (Extras/Internetoptionen/Sicherheit ...). Zum Zugriff auf die lokale Festplatte benötigt man das Scripting.FileSystem-Objekt von Microsoft. Mit dem HTML-OBJECT-Tag wird dieses AxtiveX-Control mit folgenden Zeilen in die Webseite integriert:


<OBJECT ID="MyFileSystem"
    CLASSID=CLSID:0D43FE01-F093-11CF-8940-C9054228"
    CODEBASE="http://msdn.microsoft.com/scripting/scrrun/x86/
    srt31en.cab#version=3,1,0,2230"
    WIDTH=0
    HEIGHT=0
    >
</OBJECT>


Diese Zeilen erzeugeneine Instanz des Scripting.FileSystem-Objekts, die in der Webseite dann durch die Referenz MyFileSystem (festgelegt durch das ID-Attribut) dargestellt wird. Die CLASSID ist eine eindeutige Kennung des ActiveX-Controlls (im Prinzip ein eindeutiger Name). Der Browser erkennt an der CLASSID, ob das Control schon auf dem Rechner installiert ist und lädt es bei Bedarf von der im Attribut CODEBASE angegebenen URL. Wichtig für den Programmierer ist nur, dass er mit der Objekt-Referenz MyFileSystem auf die Eigenschaften und Methoden des Scripting-Objekts durch Javascript oder VB-Script zugreifen kann. Das speichern sieht dann mit Javascript im einfachsten Fall so aus:

pfad="c:\test.txt";
textstream = MyFileSystem.CreateTextFile(pfad,true);
textstream.Write("Hallo Festplatte!");
textstream.Close();



In der zweiten Zeile erzeugt man mit der Methode CreateTextFile() ein TextStreaming-Objekt das eine lokale Datei repräsentiert. Dabei gibt der 1. Parameter den Pfad und Dateinamen (Inhalt der Variable pfad) der zu erzeugenden Datei an und der Parameter 2 bestimmt, ob ein bereits existierendes File überschrieben werden darf (TRUE=überschreiben).
Mit der Methode Write() des zuvor erzeugten TextStream-Objekts kann man nun Strings in die geöffnete Datei schreiben. Am Schluss wird die Datei mit Close() geschlossen und die Daten sind auf der lokalen Festplatte. Ebenso leicht gestaltet sich das Laden der Daten.

pfad="c:\test.txt";
textstream = MyFileSystem.OpenTextFile(pfad);
foo = textstream.ReadAll();
textstream.Close();



Die zweite Zeile erzeugt wieder ein TextStream-Objekt, wobei die Datei diesmal nicht neu erzeugt wird. Mit der Methode ReadAll() kann man den gesamten Inhalt der Datei in eine Variable lesen (foo). Es folgt die bereits bekannte Methode Close(). Die Javascriptvariable foo enthält somit den Inhalt der Datei.

Der komplette Code sieht folgendermassen aus:

<html>
    <head>
        <title>wir speichern heute lokal</title>
        <OBJECT
            ID="MyFileSystem"
            CLASSID="CLSID:0D43FE01-F093-11CF-8940-00A0C9054228"
            CODEBASE="http://msdn.microsoft.com/scripting/scrrun/x86/
            srt31en.cab#version=3,1,0,2230"
            WIDTH=0
            HEIGHT=0
            >
        </OBJECT>

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function load(){
// nur im Explorere steht die Funktion zur Verfuegung
if (navigator.appName.indexOf("Microsoft") ==-1) {
  alert('Funktion steht nur im Internet-Explorer zur Verfügung!');

  return;  //kein Explorer, also abbrechen
  }
// wenn kein Pfad angegeben ist, abbrechen
if (document.das_form.pfad.value=="")  {
  alert('Geben Sie einen Pfad für die Artikel-Datei ein!');
  return;
  }

// wenn die Datei nicht existiert, abbrechen
if (!(MyFileSystem.FileExists(document.das_form.pfad.value)))  {
   alert('Datei: '+document.das_form.pfad.value+' existiert nicht!');
   return;
   }

// alles ok, dann laden
textstream = MyFileSystem.OpenTextFile(document.das_form.pfad.value);
//Dateiinhalt in das TExtfeld im Formular schreiben
document.das_form.text.value = textstream.ReadAll();
textstream.Close();
alert(' Daten geladen!');
}


function save(){
// nur im Explorere steht die Funktion zur Verfuegung
if (navigator.appName.indexOf("Microsoft") ==-1)  {
  alert('Funktion steht nur im Internet-Explorer zur Verfügung!');
  return;
  }
// wenn kein Pfad angegeben ist, abbrechen
if (document.das_form.pfad.value=="") {
  alert('Geben Sie einen Pfad für die Artikel-Datei ein!');
  return;
  }
// Datei, die im Formular angegeben ist, öffnen
textstream = MyFileSystem.CreateTextFile(document.das_form.pfad.value,true);
// Inhalt des Textareas namens text schreiben
textstream.Write(das_form.text.value);
textstream.Close();
alert('Daten gespeichert!');
}
//-->
</SCRIPT>
</head>
<body>
<!--- das Formular mit Eingabe fuer Pfad und Daten --->
<form name="das_form">
  Pfad: <input type="text" name="pfad" value="c:\test.txt"><br>
  Text: <textarea name="text" cols="30" rows="5"> hallo! </textarea><br>
        <input type="button" value="Load!" onclick="javascript:load()">
        <input type="button" value="Save!" onclick="javascript:save()">
</form>
</body>
</HTML>


In der Seite ist ein HTML-Formular mit zwei Buttons enthalten, die jeweils die save()-   und load()-Javascript-Funktionen aufrufen. In den Funktionen werden zuerst   einige Sicherheitsabfragen durchgeführt um Fehlermeldungen zu vermeiden.   Z. B. bietet das Scripting-Objekt eine Methode FileExists(), mit der   überprüft werden kann, ob eine spezielle Datei existiert. Damit ist   es möglich vor dem Laden zu überprüfen, ob die Datei überhaupt   vorhanden ist und gegebenen falls den User darauf hinzuweisen. Das Formularelement   document.das_form.pfad enthält den Pfad und Namen der Datei (ansprechbar   in Javascript mit der Eigenschaft value). Das Formularelement document.das_form.text   enthält den den zu speichernden String (wieder über text.value   zugreifbar).

Mehr Informationen:



Steffen Goldfuss steffen@goldfuss.de - 11.10.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen