NEWS
JS Script FTP Upload
-
Hallo.
Ich suche ein JS für einen FTP Datei Upload.
Ich habe hier gelesen das es mittels jsftp gehen soll.
jsftp habe ich installiert
xx@raspberrypi:~ $ npm install jsftp up to date, audited 17 packages in 2s
Dann habe ich jsftp in der JS Instanz eingetragen und neu gestartet:
Bei meinem Test Script bekomme ich immer einen Fehler:
const Jsftp = require('jsftp'); const ftp = new Jsftp({ host: "ftp.example.com", port: 21, // defaults to 21 user: "username", // defaults to "anonymous" pass: "password" // defaults to "@anonymous" }); ftp.put('myfile.txt', '/path/to/myfile.txt', function(hadError) { if (!hadError) console.log("File transferred successfully!"); });
22:13:27.396 info javascript.0 (60276) Start javascript script.js.FTP-Upload-Test 22:13:27.421 error javascript.0 (60276) script.js.FTP-Upload-Test: Error: Cannot find module 'jsftp' 22:13:27.422 error javascript.0 (60276) at script.js.FTP-Upload-Test:1:15 22:13:27.423 error javascript.0 (60276) at script.js.FTP-Upload-Test:14:3 22:13:27.423 info javascript.0 (60276) script.js.FTP-Upload-Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 22:13:27.425 error javascript.0 (60276) script.js.FTP-Upload-Test: TypeError: Jsftp is not a constructor 22:13:27.425 error javascript.0 (60276) at script.js.FTP-Upload-Test:3:13 22:13:27.425 error javascript.0 (60276) at script.js.FTP-Upload-Test:14:3 22:13:30.342 info javascript.0 (60276) Stop script script.js.FTP-Upload-Test
Findet er das Modul nicht - aber warum oder habe ich einen Fehler im Code ?
-
Du musst es bei zusätzliche Module eintragen und nicht bei syntaxhilfe
-
Danke !
Jetzt kommt kein Fehler mehr aber er läd auch keine Datei auf den FTP.
Wo sehe ich denn was das Problem ist?08:58:52.107 info javascript.0 (62828) script.js.FTP-Upload-Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 08:58:57.058 info javascript.0 (62828) Stop script script.js.FTP-Upload-Test
Mein Script:
Die Datei heißt: daily_previous_month.txt'
Liegt hier: /opt/iobroker/exports/const Jsftp = require('jsftp'); const ftp = new Jsftp({ host: "xxxx.de", port: 21, // defaults to 21 user: "xxxx", // defaults to "anonymous" pass: "xxxxx" // defaults to "@anonymous" }); ftp.put('/opt/iobroker/exports/daily_previous_month.txt', '/test/daily_previous_month', function(hadError) { if (!hadError) console.log("File transferred successfully!"); });
-
Die Datei auf dem FTP Server ist immer leer.
Weiß jemand warum ?
-
du musst schauen was in hadError steht.
Das dürfte ein Objekt sein in dem mehr Informationen stehenIch selbst verwende die Bibliothek
https://www.npmjs.com/package/ftpvar Client = require('ftp'); var c = new Client(); c.on('ready', function() { c.put(localPath+messageFile, remotePath+messageFile, function(err) { if (err) throw err; c.end(); }); }); c.connect({ host:"host", user:"user", password:"password" } );
und das funktioniert mit hosteurope
-
@bitwicht sagte in JS Script FTP Upload:
Die Datei auf dem FTP Server ist immer leer.
Weiß jemand warum ?evtl hast du ein Rechteproblem. der user iobroker muss die Datei lesen können.
testen kannst du das auf der konsole mitsudo -u iobroker bash
dann darfst du genau das, was iobroker auf dienen system darf und kannst schauen ob du die datei lesen kannst
-
Die Berechtigung passen.
Wenn ich npm nehme, muss ich das auch m JS Adapter registrieren?
Ich habe noch einen Betrag gefunden, dass ich die Datei erst einlesen muss.
fs.readFile('/opt/iobroker/exports/daily_previous_month.txt', 'utf8', function(err, buff){ if(err){ console.log(err); } else{ ftp.put(buff, 'daily_previous_month.txt', function(err){ if (err) { console.error(err); } else { alert(file + " - uploaded successfuly"); } }); } });
Hier kommt dann folgender Fehler:
10:28:17.127 error javascript.0 (63246) script.js.FTP-Upload-Test: {}
Aber ich habe doch alle Klammer auf und wieder zu ?!
-
Danke. mit NPM habe ich es jetzt hinbekommen.
Beim JSFTP finde ich den Fehler nicht. -
Was meinst du mit? „Wenn ich npm“ nehme?
Npm steht für Node Package Manager.
Alle Bibliotheken sind da registriert, so das sie einfach heruntergeladen und installiert werden können.
Auch für jsftp hast du npm verwendet.Die genaue Anwendung jeder einzelnen Bibliothek steht in der jeweiligen Dokumentation.
-
Verstehe. Ich meine dann ob ich die andere Bibliothek auch im Adapter als zusätzliche Module eintragen muss.
Habe ich so gemacht und es scheint alles zu passen.
Danke.