Ich habe einen Ring-Handler, der Folgendes benötigt:
Jetzt habe ich es irgendwie funktioniert, aber nur der erste gezippte Eintrag wird gestreamt, und danach bleibt es stehen. Ich denke, es hat etwas mit dem Spülen / Streaming zu tun, das falsch ist.
Hier ist mein (Compojure) Handler:
%Vor%Hier ist die Stream-Lessons-Zip-Funktion:
%Vor%Und ich benutze einen pipe-Eingangsstrom, um das Streaming so zu machen:
%Vor%Ich habe also bestätigt, dass der Vektor "Lektionen" 4 Einträge enthält, aber die Zip-Datei nur 1 Eintrag enthält. Darüber hinaus scheint Chrome den Download nicht "abzuschließen", d. es denkt, es wird immer noch heruntergeladen.
Wie kann ich das beheben?
Es klingt wie das Erzeugen eines statusbehafteten Streams, indem Blocking IO von http-kit nicht unterstützt wird. Nicht-Stateful-Streams können auf diese Weise durchgeführt werden:
Ein PR zur Einführung statusbehafteter Streams mit Blocking IO wurde nicht akzeptiert:
Es klingt wie die Option zu erkunden ist, einen ByteArrayOutputStream zu verwenden, um die ZIP-Datei vollständig in Arbeitsspeicher zu rendern, und den Puffer zurückzugeben, der erzeugt. Wenn dieser Endpunkt nicht stark frequentiert wird und die von ihm erzeugte ZIP-Datei nicht groß ist (& lt; 1 GB), könnte dies funktionieren.