Response abfangen und als Alert wiedergeben Upload large Files

wer112

Top Contributor
Ich habe nun für die Senden von großen Dateien Okhttp3 benutzt.
Leider bekomme ich bei langen Dateien diese Fehler meldung:

Code:
 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
                                                                                                    <html><head>
                                                                                                    <title>413 Request Entity Too Large</title>
                                                                                                    </head><body>
                                                                                                    <h1>Request Entity Too Large</h1>
                                                                                                    The requested resource does not allow request data with POST requests, or the amount of data provided in
                                                                                                    the request exceeds the capacity limit.
                                                                                                    </body></html>

Entweder liegt es an okhttp oder an PHP.

Ich versuche mit einer if Anweisung den Response abzufangen:
Java:
 if(Response.equals(" <!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                                "                                                                                                    <html><head>\n" +
                                "                                                                                                    <title>413 Request Entity Too Large</title>\n" +
                                "                                                                                                    </head><body>\n" +
                                "                                                                                                    <h1>Request Entity Too Large</h1>\n" +
                                "                                                                                                    The requested resource does not allow request data with POST requests, or the amount of data provided in\n" +
                                "                                                                                                    the request exceeds the capacity limit.\n" +
                                "                                                                                                    </body></html>")){
                            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);
                            View view = LayoutInflater.from(getActivity()).inflate(R.layout.layout_error_dialog, getView().findViewById(R.id.layoutDialogContainer));


                            builder.setView(view);
                            ((TextView) view.findViewById(R.id.textTitle)).setText("Zu Groß");
                            ((TextView) view.findViewById(R.id.textView_error)).setText("Die Datei ist zu groß.");
                            ((Button) view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                            ((ImageView) view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                            final AlertDialog alertDialog = builder.create();

                            view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    alertDialog.dismiss();
                                    aLoadingDialog.dismiss();
                                }
                            });

                            if (alertDialog.getWindow() != null) {
                                alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                            }


                            alertDialog.show();
    
 }

Leider wird mir der Dialog nicht angezeigt.

Wie kann ich bei dieser Fehlermeldung abfangen und Ihn als Alert Dialog aufzurufen?
 

Jw456

Top Contributor
<h1>Request Entity Too Large</h1> The requested resource does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.
PHP.ini Datei bearbeiten.

auch dein webserver muss das erlauben

 

Jw456

Top Contributor
Es ist vielleicht besser einfacher nach bestimmten Wörtern Text Zeilen in dem Respons String zu suchen. Als nach den gesamten String.
 

wer112

Top Contributor
PHP.ini Datei bearbeiten.

auch dein webserver muss das erlauben

PHP.ini habe ich nicht nur .user.ini, da habe ich das schon hinzugefügt:
PHP:
max_input_vars = 10000
display_errors = off
log_errors = on
error_log = er_ror_logs/e_log.txt
post_max_size="1000M"
upload_max_filesize="1000M"
Es ist vielleicht besser einfacher nach bestimmten Wörtern Text Zeilen in dem Respons String zu suchen. Als nach den gesamten String.
Welchen String sollte ich suchen?
 

Marinek

Bekanntes Mitglied
Ich würde den HTTP Status abfragen: != 200 oder == 413

So wie du das machst, muss sich nur ein Buchstabe verändern oder ein Zeichen, dann ist das nicht mehr gleich.


Grundsätzlich und das haben wir ja schon öfter geschrieben… So wie du das machst: Das ist ULTRA anstrengend und Fehleranfällig.

Die API mit Sessions Arbeiten zu lassen finde ich nicht state of the Art. Hier müsste man OAUTH2 oder JWT einsetzen, um nicht an die Session gebunden zu sein.

Die „API“, selbst wenn sie in PHP geschrieben ist, hat ja nix mit API zu tun. Schau dir mal an wie man Restful Apis in PHP schreibt.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
post_max_size="1000M"
upload_max_filesize="1000M"

1G Byte in einem Rutsch ist schon mächtig.
Das muss wie ich schon sagte auch der Webserver mitmachen der nimmt es ja als erster entgegen.
Prüfe ob der das überhaupt annimmt. Konfig Webserver, ob das sinnvoll ist musst du wissen.

Was du dann tun kannst hat dir Konrad schon in einen andern Thread gesagt. Aber dann ist auch wider dein PHP gefragt beim Teile zusammen bauen.
 

wer112

Top Contributor
1G Byte in einem Rutsch ist schon mächtig.
Das muss wie ich schon sagte auch der Webserver mitmachen der nimmt es ja als erster entgegen.
Prüfe ob der das überhaupt annimmt. Konfig Webserver, ob das sinnvoll ist musst du wissen.

Was du dann tun kannst hat dir Konrad schon in einen andern Thread gesagt. Aber dann ist auch wider dein PHP gefragt beim Teile zusammen bauen.
Laut mein Hoster ist die Standart Größe bei 200MB. Selbst wenn ich es auf 200MB mache, funktioniert es nicht.

Was soll ich im String am besten abfragen?
 

KonradN

Super-Moderator
Mitarbeiter
Laut mein Hoster ist die Standart Größe bei 200MB. Selbst wenn ich es auf 200MB mache, funktioniert es nicht.

Was soll ich im String am besten abfragen?
Also wenn dein Hoster Requests von 200MB zulässt, dann bedeutet das nicht, dass Du Dateien von 200MB am Stück hochladen kannst. Denn Du hast ja um die Datei herum noch einen Overhead. Ggf. kommt auch noch ein Encoding der Bytes dazu (Das muss aber nicht sein.)

Davon unabhängig: Der Upload dauert ja eine gewisse Zeit. Als User Deiner App hätte ich kein Verständnis, wenn ich da auf einen solchen Request warten müsste ohne irgendwelches Feedback. Weiterhin wäre ich bestimmt ungehalten, wenn dann nach 80% oder so der Upload abbrechen würde, weil das Handy in den Standby Modus gegangen ist, eine andere App in den Vordergrund ging und Android die andere App auf Grund des Speicherverbrauchs beendet hätte oder oder oder ...

Die Idee, das einfach in Chunks zu übermitteln, ist doch nicht sonderlich schwer. Dann kannst Du auch einen Fortschritt anzeigen, Abbrüche können behandelt werden und so weiter ...

Aber ok, ich bin eh nicht Zielgruppe Deiner App, daher bin ich auch schon wieder ruhig....
 

Jw456

Top Contributor
Kann und will hier auch nicht mehr dazu sagen.
Ob die Datei zu groß ist kann man auch vor dem senden ermitteln und dem User mitteilen.
Gutes gelingen
 

Oben