Wie kann ich song attachments hoch- und herunterladen via JS?
-
Siehe https://github.com/churchtools/churchtools-js-client/issues/25
Wenn ich PDFs herunterlade, schleicht sich irgendwo im header ein fehler ein (encoding?), der die gesamte datei unbrauchbar macht, obwohl sie ansonsten identisch ist:
churchtoolsClient.get(f.fileUrl).then(file => { fs.createWriteStream(filename).write(file) })
Auch das hochladen von Anhängen zu einem Event (ich denke mal über POST
/files/service/ID
) bekomme ich nicht hin, die Dokumentation ist da sehr spärlich wie man die files mitgeben soll.Hier ist der gesamte code: https://code.ftt.gmbh/janek/carvent/src/branch/main/index.js#L59
-
@melonion Mein Verdacht wäre ebenfalls das encoding. Ich kenne mich mit Javascript nur mäßig aus, deshalb frage ich mal ganz plump: Bist du denn sicher, dass dir createWriteStream() einen binären Stream zur Verfügung stellt?
-
@thommyb JS ist für mich auch nur ne Nebensprache, ich dachte ich kann das Script einfach schnell schreiben und gut ist, aber genau sowas weiß ich nicht, deswegen frage ich
@SilasGuenther und @hubermat ihr entwickelt den Client mit, könnt ihr vielleich weiterhelfen?
-
Du bist mit der FormData Idee schonmal auf einem guten Weg.
Schau mal bitte nach, ob du wie @thommyb schon erwähnt hat hier die definierten Wege befolgst, eine Datei via FormData hochzuladen.Die offizielle Dokumentation redet hier davon, dass ein File oder einen Blob genutzt werden muss um eine Datei hochzuladen. (Hierbei ist vllt. interessant, das der
File
Datentyp auf demBlob
aufbaut.Generell solltest du aber Dateien mit dem ChurchTools Client auch hochladen können.
Das habe ich z.B. in einem Privatprojekt (leider kein öffentlicher Code...) schon wie folgt gemacht:
const formData = new FormData(); formData.append('files[]', hierDeinFileOderBlobObject); churchtoolsClient.post(`/files/${domainType}/${domainObjectId}`, formData);
So müsste der Upload dann auch funktionieren.
Der Download von Dateien geht dann analog zu dem, was Andreas auf GitHub geschrieben hat.
Wichtig ist nur, dass du den Cookie mitschickst, welche Library du für das wirkliche herunterladen der Datei nimmst, ist dann egal. (z.B. Axios, fetch oder das node eigene http)