NEWS
[gelöst] Datei-Download per Button
-
Ich würde gerne aus meiner Visualisierung heraus per Widget "Button Link" eine Textdatei mit aufgezeichneten Daten herunterladen können.
Die Datei befindet sich im Verzeichnis 'vis.0'.
Klicke ich auf den Button, wird mir leider nur angezeigt "File daten.txt not found: {}".
Verlinke ich den Button auf eine Bild-Datei im selben Verzeichnis, so wird diese korrekt angezeigt.
Hat jemand eine Idee, wie ich soetwas realisiern kann? -
Ich würde gerne aus meiner Visualisierung heraus per Widget "Button Link" eine Textdatei mit aufgezeichneten Daten herunterladen können.
Die Datei befindet sich im Verzeichnis 'vis.0'.
Klicke ich auf den Button, wird mir leider nur angezeigt "File daten.txt not found: {}".
Verlinke ich den Button auf eine Bild-Datei im selben Verzeichnis, so wird diese korrekt angezeigt.
Hat jemand eine Idee, wie ich soetwas realisiern kann?nimm ein standard html widget und füge das in das html feld ein - in der ersten zeile mußt du deinen filenamen eintragen ! unter src kannst du ein bild eintragen
<a href="data:text/plain;charset=UTF-8,/vis.0/test.txt" download> <img alt="Qries" src="https://www.qries.com/images/banner_logo.png"</a> <script> var downloadFile = function(url){ let a = document.createElement('a'); a.href = 'data:text/plain;charset=UTF-8,' + '' + url; a.download = url.substr(url.lastIndexOf('/') + 1); document.body.appendChild(a); a.click(); document.body.removeChild(a); } </script>das file muss aber writefile in iobroker geschrieben worden sein
es wird ein link mit dem inhalt des files geöffnet - muss morgen mal nachsehen, ob das mit direkt download auch geht - habe heute keine zeit mehr
-
nimm ein standard html widget und füge das in das html feld ein - in der ersten zeile mußt du deinen filenamen eintragen ! unter src kannst du ein bild eintragen
<a href="data:text/plain;charset=UTF-8,/vis.0/test.txt" download> <img alt="Qries" src="https://www.qries.com/images/banner_logo.png"</a> <script> var downloadFile = function(url){ let a = document.createElement('a'); a.href = 'data:text/plain;charset=UTF-8,' + '' + url; a.download = url.substr(url.lastIndexOf('/') + 1); document.body.appendChild(a); a.click(); document.body.removeChild(a); } </script>das file muss aber writefile in iobroker geschrieben worden sein
es wird ein link mit dem inhalt des files geöffnet - muss morgen mal nachsehen, ob das mit direkt download auch geht - habe heute keine zeit mehr
Das ist ja klasse. Vielen Dank für die schnelle Hilfe!
Leider werde ich es verrmutlich erst morgen schaffen, das auszuprobieren,
ich gebe dann aber sofort Bescheid, ob es funktioniert hat. -
Ich würde gerne aus meiner Visualisierung heraus per Widget "Button Link" eine Textdatei mit aufgezeichneten Daten herunterladen können.
Die Datei befindet sich im Verzeichnis 'vis.0'.
Klicke ich auf den Button, wird mir leider nur angezeigt "File daten.txt not found: {}".
Verlinke ich den Button auf eine Bild-Datei im selben Verzeichnis, so wird diese korrekt angezeigt.
Hat jemand eine Idee, wie ich soetwas realisiern kann?@thorti sagte in Datei-Download per Button:
Die Datei befindet sich im Verzeichnis 'vis.0'.
habe nochmal nachgeschaut - da reagiert jeder browser anders
mit dem widget, welches du erwähnst funktioniert es auch - aber wichtig ist dabei, wie du die datei in das vis.0 verzeichnis kopiert hast
entweder über vis-admin und dessen dateimanager - oder über ein script mit dem writefile befehl - ansonsten weiss der iobroker-webserver nicht , das es das file gibt -
Das ist ja klasse. Vielen Dank für die schnelle Hilfe!
Leider werde ich es verrmutlich erst morgen schaffen, das auszuprobieren,
ich gebe dann aber sofort Bescheid, ob es funktioniert hat.z.b mit dem code in einem html widget, wird in android angeboten, es down zu loaden
<a href="/vis.0/test.txt" download="test.txt">Download PDF</a>bei mir in chrome auf dem pc kann ich es auch direkt downloaden - nur leider sichert der pc es als test.js anstatt als test.txt ab - warum weiß ich nicht
es kommt also darauf an, mit welchen geräten du es downloaden willst
mit dem widget von dir, wird in android auch nur die textdatei angezeigt und nicht sofort downgeloaded
-
Das ist ja klasse. Vielen Dank für die schnelle Hilfe!
Leider werde ich es verrmutlich erst morgen schaffen, das auszuprobieren,
ich gebe dann aber sofort Bescheid, ob es funktioniert hat.hätte nicht gedacht, das dies so schwierig wird
die bis jetzt beste variante - funktioniert in firefox, chrome auf pc und in android - in fully funktioniert es (siehe nächsten post), vis app nicht getestet - vermutlich nicht
folgendes angleichen bei dir:
- zeile 3: "#w02460" ist die widget id - die musst du von dir eintragen
- zeile 5: download("test.txt", "/vis.0/test.txt"); - dort muss dein pfad und dateiname rein
- zeile 21 : dort kannst du dein bild einfügen
<script> $('#w02460').click(function () { alert("Wollen Sie die Datei downloaden ?"); download("test.txt", "/vis.0/test.txt"); }); function download(filename, urldata) { var a = document.createElement("a"); a.href = urldata; a.setAttribute("download", filename); a.click(); } /*download("test.txt", "/vis.0/test.txt");*/ </script> <img src="https://forum.iobroker.net/assets/uploads/system/site-logo.png?v=gqnpiq7ce6k" alt="bild" width="100" height="100">[search help] download file datei vis
-
hätte nicht gedacht, das dies so schwierig wird
die bis jetzt beste variante - funktioniert in firefox, chrome auf pc und in android - in fully funktioniert es (siehe nächsten post), vis app nicht getestet - vermutlich nicht
folgendes angleichen bei dir:
- zeile 3: "#w02460" ist die widget id - die musst du von dir eintragen
- zeile 5: download("test.txt", "/vis.0/test.txt"); - dort muss dein pfad und dateiname rein
- zeile 21 : dort kannst du dein bild einfügen
<script> $('#w02460').click(function () { alert("Wollen Sie die Datei downloaden ?"); download("test.txt", "/vis.0/test.txt"); }); function download(filename, urldata) { var a = document.createElement("a"); a.href = urldata; a.setAttribute("download", filename); a.click(); } /*download("test.txt", "/vis.0/test.txt");*/ </script> <img src="https://forum.iobroker.net/assets/uploads/system/site-logo.png?v=gqnpiq7ce6k" alt="bild" width="100" height="100">[search help] download file datei vis
nachtrag - funktioniert auch in fully browser - einstellung
Check these settings in Fully Web Content Settings:
- select a way of opening other linked files. Like for PDFs you can disable them, pass an URL to another app, download and pass a file/content to external app or just download the file.
-
nachtrag - funktioniert auch in fully browser - einstellung
Check these settings in Fully Web Content Settings:
- select a way of opening other linked files. Like for PDFs you can disable them, pass an URL to another app, download and pass a file/content to external app or just download the file.
Hallo liv-in-sky,
erst einmal vielen Dank für deine Hilfe,
das Script funktioniert wunderbar.
Das Problem bei mir ist anscheinend noch ein ganz anderes, und zwar erzeuge ich die Textdatei in eine Java-Skript mit dem Befehl "fs.writeFileSync(datei, string)"
und füge jeweils Daten mit "fs.appendFileSync(datei, string)"
hinzu. Ich kann mir die Datei über eine Konsole mit dem nano-Editor ansehen, aber der VIS-Dateimanager zeigt mir diese Datei nicht an, deshalb kann ich die Datei auch nicht herunterladen.
Lade ich mit dem Dateimanager eine Testdatei von menem PC hoch, funktioniert das bestens.
Jetzt muss ich also noch einen Weg finden, wie ich die Datei brauchbar dorthin bekomme. -
Hallo liv-in-sky,
erst einmal vielen Dank für deine Hilfe,
das Script funktioniert wunderbar.
Das Problem bei mir ist anscheinend noch ein ganz anderes, und zwar erzeuge ich die Textdatei in eine Java-Skript mit dem Befehl "fs.writeFileSync(datei, string)"
und füge jeweils Daten mit "fs.appendFileSync(datei, string)"
hinzu. Ich kann mir die Datei über eine Konsole mit dem nano-Editor ansehen, aber der VIS-Dateimanager zeigt mir diese Datei nicht an, deshalb kann ich die Datei auch nicht herunterladen.
Lade ich mit dem Dateimanager eine Testdatei von menem PC hoch, funktioniert das bestens.
Jetzt muss ich also noch einen Weg finden, wie ich die Datei brauchbar dorthin bekomme.ja das ist der befehl writefile
da gibt es einen thread
https://forum.iobroker.net/topic/25541/gelöst-wie-writefile-in-js-script-nutzen
vom pc in einen ordner auf dem server (samba,sftp, ftp)- mit einem script ordner lesen und in vis.0 schreiben/kopieren/ besser verschieben
das werden wir auch noch hinbekommen :-)
-
ja das ist der befehl writefile
da gibt es einen thread
https://forum.iobroker.net/topic/25541/gelöst-wie-writefile-in-js-script-nutzen
vom pc in einen ordner auf dem server (samba,sftp, ftp)- mit einem script ordner lesen und in vis.0 schreiben/kopieren/ besser verschieben
das werden wir auch noch hinbekommen :-)
@liv-in-sky
Es hat ein wenig gedauert, aber jetzt funktioniert alles!
Vielen Dank nochmal an liv-in-sky!
Es ist also wirlich entscheidend, die Datei über die Funktion writefile() erstellt wird.
Mein Problem war dazu noch, daß ich die Datei vorher mit readFile() auslesen wollte, um eine Zeile daranzuhängen. Ich war davon ausgegangen, dass im Skript alles sequentiell abgearbeitet wird.
Das ist aber nicht so, während die Funktion readFile() also noch aktiv ist, wird das Skript weiter abgearbeitet und meine String-Variable, die durch readFile() gefüllt werden sollte, war in der weiteren Bearbeitung aber noch leer.
Also rufe ich writeFile() innerhalb der readFile() auf, und so funktioniert es.var value = obj.state.val; var string = " "; var datei = "/test.txt" readFile('vis.0',datei, function (error, data) { string += data; writeFile('vis.0',datei, string, function (error) { }); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden