Voraussetzungen
- Google Account
- idealerweise Testumgebung als Linux-System um curl-Befehl im Terminal korrekt verwenden zu können.
Einleitung
Es gibt zwei Ansätze zum Hochladen der Bilddateien, die das gleiche Resultat liefern.
- Base64 + URL-Parameter
Vorteile:
Einfach mit curl-Befehl zu nutzen
Funktioniert zuverlässig mit kleineren Dateien (<1 MB).
Keine zusätzliche Header-Konfiguration notwendig.
Nachteile:
Base64 bläht die Datei um ~30 % auf.
Große Dateien können zu Zeitüberschreitungen oder HTTP-Fehlern führen. - POST mit JSON oder multipart/form-data
Vorteile:
JSON ist strukturierter → besser erweiterbar (z. B. mit Metadaten).
multipart/form-data erlaubt direkten Upload ohne Base64, ideal für große Dateien.
Robust bei größeren Datenmengen.
Nachteile:
Erfordert mehr Konfiguration (Headers, Parsing).
multipart/form-data in Google Script zu parsen ist umständlich.
Variante 1 – Base64 + URL-Parameter
Google Script
function doPost(e) { try { Logger.log("Start Upload"); var folder = DriveApp.getFolderById("IHRE GOOGLE DRIVE FOLDER-ID"); Logger.log("Folder gefunden"); var data = e.parameter.contents; var name = e.parameter.filename || "upload_" + Date.now() + ".jpg"; Logger.log("Filename: " + name); var blob = Utilities.newBlob(Utilities.base64Decode(data), MimeType.JPEG, name); var file = folder.createFile(blob); Logger.log("Datei erstellt: " + file.getName()); return ContentService.createTextOutput("Upload OK: " + file.getName()); } catch (err) { Logger.log("Fehler: " + err.message); return ContentService.createTextOutput("Fehler: " + err.message); } } function doGet(e) { return ContentService.createTextOutput("Web-App ist aktiv!!!."); }
Anmerkungen:
Den Code kopieren und auf https://script.google.com/ anmelden. Danach ein neues Projekt anlegen und im Editorfenster den Code einfügen.
Anstelle von „IHRE GOOGLE DRIVE FOLDER-ID“ muss die ID des Google Drive Ordners in den gespeichert werden soll, zwischen den Anführungszeichen eingetragen werden.
Abschließend das Speichern und Bereitstellen nicht vergessen
Eingabe Konsole
curl -X POST -d "filename=testbild_2.jpg" --data-urlencode "contents=$(base64 -w 0 /media/cam_uploads/testbild.jpg)" "https://script.google.com/macros/s/AKfycbw.../exec"
Anmerkungen:
Bei dem Eintrag hinter „filename=“ handelt es sich um den Dateiname unter dem das Bild später in Google Drive gepeichert wird.
In unserem Beispiel ist die Pfadangabe und die Datei des hochzuladenden Bildes hier zu finden:
/media/cam_uploads/testbild.jpg. Der Speicherort und Datei müssen vorhanden sein-
Die Angabe „https://script.google.com/macros/s/…/exec“ ist die Webapp-URL des Google Scripts.
Variante 2 – POST mit JSON oder multipart/form-data
Google Script
function doPost(e) { try { Logger.log("Start Upload"); // JSON auslesen var json = JSON.parse(e.postData.contents); var data = json.contents; var name = json.filename || "upload_" + Date.now() + ".jpg"; Logger.log("Filename: " + name); var folder = DriveApp.getFolderById("IHRE GOOGLE DRIVE FOLDER-ID"); Logger.log("Folder gefunden"); var blob = Utilities.newBlob(Utilities.base64Decode(data), MimeType.JPEG, name); var file = folder.createFile(blob); Logger.log("Datei erstellt: " + file.getName()); return ContentService.createTextOutput("Upload OK: " + file.getName()); } catch (err) { Logger.log("Fehler: " + err.message); return ContentService.createTextOutput("Fehler: " + err.message); } } function doGet(e) { return ContentService.createTextOutput("Web-App ist aktiv!!!."); }
Eingabe Konsole
curl -X POST \ -H "Content-Type: application/json" \ -d "$(jq -n --arg filename "testbild_12.jpg" --arg contents "$(base64 -w 0 /media/cam_uploads/testbild.jpg)" '{filename: $filename, contents: $contents}')" \ "https://script.google.com/macros/s/AKfycbw.../exec"