2017-05-05 2 views
0

Ich habe Probleme mit dem Hochladen großer Dateien in Autodesk Forge.Hochladen von großen Dateien in Autodesk Forge und 502 Fehler

Dies ist, was ich tun: Ich berechtige ordnungsgemäß Zugriff mit 2legged Auth, erstellen Sie Bucket, und ich kann Revit-Datei hochladen und im Gegenzug bekomme ich URN (Objekt-ID). Das ist alles genau richtig.

Der Upload funktioniert einwandfrei für Dateien mit einer Größe von bis zu ~ 100 MB. Ich implementierte auch Lebenslauf-Upload-Anweisungen aus https://github.com/Autodesk-Forge/forge-php-client

Diese Lebenslauf-Upload funktioniert auch gut für Dateien relativ klein - sagen 50-100MB. Ich habe mit den Blöcken 2 und 5MB getestet.

aber ich habe ein echtes Problem mit größeren Dateien. Sagen Sie 200MB, 500MB oder größer. Ich habe festgestellt, dass, wenn ich 200MB Datei mit Nicht-Wiederaufnahme-Option hochladen, es richtig geht und ich JSON mit Daten erhalte. Mit größeren Dateien - es ist zufällig. Sobald sie durchlaufen, einmal Fehler. Die größte Datei, die ich hochladen konnte nicht-resume-Methode war ~ 500MB.

Wenn ich jedoch upload für die gleiche 200MB Datei verwenden, dann erhalte ich 502 Fehler. Ich habe auch festgestellt, dass dies zufällig geschieht. Ich schaffte es zweimal 200 MB Dateien hochzuladen. aber in den meisten Fällen (ich sage 9 von 10 Fällen) gibt es böse 502 Fehler. Und ich bin mir nicht sicher, was ich damit anfangen soll.

Ich sende meine Dateien vom Server in Google Cloud. Wir haben auch Load Balancer.

Können Sie helfen, was diesen 502 Fehler verursachen kann, oder geben Sie einige Informationen, wenn es Einschränkungen gibt? Ich bin mir sicher, dass mein Code in Ordnung ist, weil er für kleinere Dateien funktioniert < = 100MB. Ich habe auch curl-Befehle direkt von CLI und nicht von meinem Quellcode getestet, aber keinen Unterschied. Also nehme ich an, dass es etwas mit Serverüberlastung, Load Balancer oder solchen Einschränkungen am Ende der Fälschung zu tun hat.

alex

+0

Hallo @alexz, ich denke, es würde nicht Max Timeout erfordern, wenn mit einem viel kleinen Brocken (2M wird empfohlen). Könnten Sie eine Aufzeichnung über die Sitzungs-ID des fortsetzbaren Hochladens machen? Ich kann unser Technikerteam bitten, im Backend nach weiteren Informationen zu fragen. Ich habe von einem anderen Kunden, der C# verwendet, von einem solchen Problem erfahren. Es ist zwar nicht immer reproduzierbar. Ich habe ihn auch gebeten, die Notiz mit Sitzungs-ID zu machen, wenn er das nächste Mal kommt. –

Antwort

0

Sie müssen möglicherweise die konfiguriert erlaubt Ausführungszeit im Backend erhöhen. In PHP müssen Sie beispielsweise den Wert max_execution_time in Ihrem php.ini wie in this post besprochen erhöhen. Dies könnte für die Zufälligkeit Ihres Fehlers verantwortlich sein ... in einem Moment ist Ihre Upload-Geschwindigkeit möglicherweise etwas schneller als in einem anderen Moment.

+0

THX für Antwort, aber es erklärt nicht, warum es auch passiert, wenn ich Curl-Befehl direkt in Bash ausführen - nicht in PHP. – alexz

+0

@alexz Wenn das Backend in PHP geschrieben ist, spielt es keine Rolle, wie Sie die Daten erhalten. Ein PHP-Programm empfängt es immer noch und unterliegt daher den in der Datei 'php.ini' angegebenen Einschränkungen. – Treebasher

+0

aber was ich meine, ist die Situation, wo ich Befehl directylu von Bash Curl -V ... nicht aus PHP senden. – alexz

0

thx für Ihr Feedback - ich schätze es.

@Treebasher, @Xiaodong - Jungs, einige weitere Informationen (vielleicht wird es etwas mehr Licht geben ...)

ich viel Zeit dieses Problem und endgültiges Urteil zu untersuchen heute ausgegeben ist, dass seine Art von Einschränkung auf Google Cloud-Server. Es gibt solche Timeout 60s, die Verbindung bricht. Getestet habe ich verschiedene Szenarien, verbesserten curl usw.

in jedem Szenario: Upload-Datei mit bash/curl Upload von PHP , wenn die Datei relativ klein ist - sagen 50megs - es ok geht. wenn es größer> = 200mb und mit CHUNK-Methode - nach 60 Sekunden habe ich Timeout. (Ich checzeked mit Timer :)

Ich testete auch meinen Code von lokalen PC und auf verschiedenen Servern (Digital Ocean) und es funktioniert gut, sogar 900 Mega-Dateien werden ordnungsgemäß gesendet (es war für ca. 7 Minuten senden), aber schließlich Ich habe richtigen JSON-Code. Also - natürlich - es ist kein falscher PHP-Code, keine Standardeinstellungen in PHP.ini - da ich 2 Standardkonfigurationen auf 2 anderen Servern habe, aber für 100% etwas, das mit der spezifischen Konfiguration auf Google Cloud Server zusammenhängt und mit Timeouts zusammenhängt.

Ich habe auch mögliche Erklärungen ausgeschlossen: es ist kein Problem am Ende der Schmiede. seine nicht curl Version seine net.ipv4.tcp_fin_timeout nicht

die einzige „Verdacht“ Google Cloud ist damit der nächste Schritt ot Spur Quelle Problem bei Googles Cloud ist und Lösung finden.

Verwandte Themen