Thread anzeigen
Posten Sie hier, wenn Sie den richtigen Forenbereich nicht finden können oder eine allgemeine Frage stellen möchten.
 Thread drucken
NAS Upload per API
te4du
Hi,
ich möchte Dateien auf Fritz!NAS per API aus der Ferne hochladen.

Dafür besorge ich mir eine Session-ID (funktioniert) und kann auch schon NAS-Ordner auslesen.
Das funktioniert z.B. so (Powershell):

wget -uri "https://meinefritzbox.myfritz.net:123/nas/api/data.lua?sid=123456789abcdef&path=%2Fordner%2Ffolder&limit=300&sorting=%2Bfilename&c=files&a=browse"


(Die Parameter in der URL sind: Die Subdomain, der Port, die SID und der Path.)

Nun will ich einen Upload machen (wieder mit Powershell):

# Datei als Binärdaten laden
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
Invoke-RestMethod -Uri https://meinefritzbox.myfritz.net:123/nas/api/data.lua?sid=123456789abcdef&filename=meinedatei.txt&targetdir=ordner%2Ffolder -Method Post -Headers @{"Content-Type" = "application/octet-stream"} -Body $fileBytes


Aber ich bekomme nur das als Response:

getcgivars(): Unsupported Content-Type. 


Welche Content-Types sind denn möglich? Oder was mache ich falsch?
Hat jemand damit Erfahrung?
Meine Fritzbox ist ein 7490 mit Fritz-OS 7.62
Danke.
 
Fritzie
Der Fehler ist eigentlich schon die entscheidende Spur:

getcgivars(): Unsupported Content-Type.

Das bedeutet, dass die NAS-API den Upload nicht als Raw-Stream (application/octet-stream) erwartet.

Bei FRITZ!OS 7.x verwendet die /nas/api/data.lua-Schnittstelle für Uploads multipart/form-data, so wie es auch der Webbrowser macht. Die API ist ursprünglich für die Weboberfläche entwickelt worden und akzeptiert keinen beliebigen HTTP-Body.

Mit PowerShell solltest du den Upload deshalb eher so aufbauen:

$form = @{
upload = Get-Item "C:\Temp\meinedatei.txt"
}

Invoke-RestMethod
-Uri "https://meinefritzbox.myfritz.net:123/nas/api/data.lua?sid=123456789abcdef&targetdir=%2Fordner%2Ffolder"
-Method Post
-Form $form

Ab PowerShell 6/7 erzeugt -Form automatisch einen multipart/form-data-Request mit dem korrekten Boundary.


Ein weiterer Punkt

Die URL

/nas/api/data.lua?...&targetdir=...

reicht für einen Upload oft nicht aus. Die NAS-API erwartet zusätzlich einen Action-Parameter, z. B. a=upload oder einen vergleichbaren Befehl. Welche Parameter tatsächlich erforderlich sind, ist von der FRITZ!OS-Version abhängig und leider kaum dokumentiert.


Mein Tipp zum Debuggen

Da die AVM-NAS-API nicht offiziell dokumentiert ist, würde ich genau den Request nachbauen, den die FRITZ!Box-Weboberfläche selbst verwendet:

1. Browser öffnen (F12 → Entwicklertools).
2. Im Reiter Netzwerk (Network) eine Datei über FRITZ!NAS hochladen.
3. Den POST-Request zu /nas/api/data.lua ansehen.

Dort siehst du exakt:

welche URL aufgerufen wird,
welche Parameter (a, sid, targetdir, …) übertragen werden,
welchen Content-Type die FRITZ!Box erwartet,
und wie die Datei im Multipart-Formular benannt wird.

Das ist wesentlich zuverlässiger, als die API zu erraten.

Noch eine Anmerkung

Da du eine FRITZ!Box 7490 mit FRITZ!OS 7.62 verwendest, kann es außerdem sein, dass Beispiele aus neueren FRITZ!OS-8.x-Versionen nicht funktionieren. AVM hat die NAS-API zwischen den Versionen mehrfach erweitert.
In meiner Freizeit versuche ich so gut ich kann zu helfen. Geduld ist eine Tugend. 🙏
 
te4du
Hallo Fritzie, Danke für Deine Tipps.
Ich hab erstmal einsehen müssen, dass meine Powershell 5 zu alt ist und habe mir Powershell 7.6.3 heruntergeladen. Damit kann er dann auch den Parameter -Form.
Den Parameter -Form $form zeigt er dann an als
-Form System.Collections.Hashtable
Den Parameter &a=upload habe ich eingefügt.
Eine Fehlermeldung bekomme ich nun nicht mehr, aber mein Response ist leer und die Datei wurde leider nicht hochgeladen. Bei zu vielen Versuchen macht die Fritzbox dicht und verdonnert mich zu einer Pause.
Den Versuch mit dem Debugger des Webbrowsers habe ich gemacht, aber sowohl beim Upload mit Drag&Drop als auch beim Upload mit dem Button "+ Hinzufügen" bekomme ich einen Aufruf mit /nas/cgi-bin/nasupload_notimeout, also letztlich wohl ein ganz andere Methode für das interaktive Hochladen. :-(
Ich versuche es weiter.
 
 Diese Website nutzt Affiliate-Links von Awin sowie Google-Anzeigen, um den Betrieb für Sie kostenlos zu halten.
 Erfolgt über ein Affiliate-Link ein Kauf, erhalten wir eine Provision ohne Mehrkosten für Sie.
 Bitte blockieren Sie keine Anzeigen und Cookies.
Zum Forum springen
Neuer Thread Antwort posten
Verwende BBcode oder HTML um nach; 'NAS Upload per API', zu verweisen!
BBcode:
HTML:
Verwandte Themen
Betreff Fritz Forum         Letzter Beitrag
VPN Datei upload Abbruch FRITZ!Box allgemein : 4 27.03.22
Upload super, Downloads mies: Fritz Box 6690 mit Repeater FRITZ!Box allgemein : 4 22.03.22