VolleyMultipartRequest

Jw456

Top Contributor
Erstmal solten wir klären warum du die Exception von Post
#94 bekommst.

Dazu würde mich interessieren wo du deine php läuft. Auf einem lokalen Server im LAN oder ein Webserver im Netz?
 

wer112

Top Contributor
Erstmal solten wir klären warum du die Exception von Post
#94 bekommst.
Das war nur einmal mit dem Host. Sonst bekomme ich wenn nur diesen Yolly Error: null
Als ich das mit dem leeren Bytes gemacht habe, habe ich immer einen JSON Antwort bekommen.

Außerdem in Postmann klappt alles einwandfrei. Sogar das Hochladen mit dem Type.
Dazu würde mich interessieren wo du deine php läuft. Auf einem lokalen Server im LAN oder ein Webserver im Netz?
Alle Dateien laufen logischerweise auf einem Webserver. Da jeder Appnutzer darauf zugreifen muss....
 

mihe7

Top Contributor
Die URL funktioniert, da die Zip Datei ohne den Filter gesendet wird.
Äh...
Volley Error: com.android.volley.NoConnectionError: java.net.UnknownHostException: Unable to resolve host "www---.de": No address associated with hostname
Die Fehlermeldung ist eindeutig: der Hostname konnte nicht in eine IP-Adresse aufgelöst werden.

EDIT:
Das war nur einmal mit dem Host
Dann wird es halt einfach ein Aussetzer gewesen sein. Sowas probiert man öfter, bevor man sich an ein Forum wendet.
 

wer112

Top Contributor
Das heißt du hast zwei php Scripte eines mit deinem so genanten Filter,
und eines ohne deinem Filter (prüfen auf richtige Datei Endung).

Es ist eine Datei, wo der Filter eingebaut ist und auf die Endung prüft. Siehe Post '48. Das eine ist mit richtigem Endung und das zweite mit der endung .text.
Nur mir der Endung .zip kann die Datei auf den Server geladen werden. Das alles hat super funktioniert n Postmann und habe jedes mal ein Response erhalten.

Laufen den wirklich beide mit Postman?
Ja
Zeige doch mal was du genau als Response bekommst.
 

wer112

Top Contributor
Ja, #102 und #103 hatten sich überschnitten. Daher habe ich #103 nochmal aktualisiert.

Ansonsten: wie sieht denn die von Dir überschriebene Methode getByteData() aktuell aus?
Java:
public byte[] getArrayFromZip( String  zipPath) {
        File myFile = new File(zipPath);
        ByteArrayOutputStream byteBuffer = null;

        try (InputStream inputStream = new FileInputStream(myFile)) {
            byteBuffer = new ByteArrayOutputStream();

            byte[] buffer = new byte[1024];
            int len;

            while ((len = inputStream.read(buffer)) != -1) {
                byteBuffer.write(buffer, 0, len);
            }

        }catch (IOException e){
            Log.e("Free Entwickler", "IOException: " + e);
        }
        return byteBuffer.toByteArray();
    }
 

wer112

Top Contributor
Woher weist du das? Hast du die Datei wirklich auf dem server und kasst du sie auch öffnen und entpacken?
Ja ich konnte die Öffnen und mit dem Passwort entpacken. Nur die Zip vom App ist manchmal nicht geht, da ich zu oft die gleiche Zip. ne verschlüsselt habe. Ansonsten geht das.

Es kommt auf dem Server an und kann mit FileZilla es downloaden und öffnen.
 

wer112

Top Contributor
Lösche die Datei auch auf dem Server bevor du einen neuen Versuch machst.
Vom Server gelöscht, nach ca. 10 Seck Volly Error: null.

Screenshot (278).png

Nach mehr maligen Probieren ohne Filter habe ich irgendwie ein Response bekommen, wo ich nicht weiß, wieso es die ganze Zeit nicht geklappt hat und jetzt plötzgeklappt hat. Werde weitere Test machen.

Aber Type wird nicht mitgesendet:

Screenshot (280).png
 
Zuletzt bearbeitet:

wer112

Top Contributor
Ich lese da nix von getByteData().
und dort steht der Type drinnen? Habe gesehen das ist eine Methode von dem VollyMultipartRequest Klasse. Kann mann da was mitsenden:

Mein Sender habe ich wie JW45 gemacht hatte....:

Java:
 @Override
            protected Map<String, DataPart> getByteData() {
                Map<String, DataPart> params = new HashMap<>();

                byte[] zipArray = getArrayFromZip(zipUri);
                params.put("zip", new DataPart("E" + kundennummer + ".zip", zipArray));

                return params;
            }
 

wer112

Top Contributor
Lasse dir doch den typ in deinen php Im Response mitgeben.

$_FILES['zip']['type']
Pache das mit in dein respons json
Hast du die Fotos nicht gesehen? ALs Typ erhalte ich in der App nur den Type: "" und in Postmann steht da das richtig drinnen.

Java:
if($check){
                    $array['format'] = $_FILES['zip']['type'];
                    $array['response'] = "erfolgreich hochgeladen";
                    echo json_encode($array);

                }else{
                    $array['format'] = $_FILES['zip']['type'];
                    $array['response'] = "nicht erfolgreich hochladen";
                    echo json_encode($array);
                }

Das Format übergebe ich ja um das zu prüfen.
 

Jw456

Top Contributor
Du sollst schauen was in deinen ohne Filter Script in der Variablen $_FILES['zip']['type'].
Steht
Und sas solte inder Response mitgehen weden.
 

Jw456

Top Contributor
Ok der wird ja auch nicht mitgehen.
Dann schaue in dem php vom Tutorial wie er da auf die endung der Datei kommt.

Ansonsten musst du auch dein DataPart verändern und dort auch den typ setzen.

Denn der ist da ja null
 

KonradN

Super-Moderator
Mitarbeiter
Der Type wird doch in der Entity nicht gesetzt. Wenn Du den Type gesetzt haben willst, dann wirst Du da vermutlich den Code anpassen müssen.

Derzeit hast Du ja nur einen Konstruktor mit zwei Parametern, den Du dann so aufrufst: new DataPart("E" + kundennummer + ".zip", zipArray)

Du kannst da aber noch einen Konstruktor hinzu fügen:
Java:
        public DataPart(String name, byte[] data, String type) {
            fileName = name;
            content = data;
            this.type = type;
        }

Dann kannst Du den type noch bei Erstellung des DataPart mit angeben.

Der Code vom Request hatte - so ich mich richtig erinnere - den type schon korrekt mitgegeben...
 

Jw456

Top Contributor
Der Type wird doch in der Entity nicht gesetzt. Wenn Du den Type gesetzt haben willst, dann wirst Du da vermutlich den Code anpassen müssen.

Derzeit hast Du ja nur einen Konstruktor mit zwei Parametern, den Du dann so aufrufst: new DataPart("E" + kundennummer + ".zip", zipArray)

Du kannst da aber noch einen Konstruktor hinzu fügen:
Java:
        public DataPart(String name, byte[] data, String type) {
            fileName = name;
            content = data;
            this.type = type;
        }

Dann kannst Du den type noch bei Erstellung des DataPart mit angeben.

Der Code vom Request hatte - so ich mich richtig erinnere - den type schon korrekt mitgegeben...
Ist genau das was ich in post #125 auch gesagt habe.
 

wer112

Top Contributor
Der Type wird doch in der Entity nicht gesetzt. Wenn Du den Type gesetzt haben willst, dann wirst Du da vermutlich den Code anpassen müssen.

Derzeit hast Du ja nur einen Konstruktor mit zwei Parametern, den Du dann so aufrufst: new DataPart("E" + kundennummer + ".zip", zipArray)

Du kannst da aber noch einen Konstruktor hinzu fügen:
Java:
        public DataPart(String name, byte[] data, String type) {
            fileName = name;
            content = data;
            this.type = type;
        }

Dann kannst Du den type noch bei Erstellung des DataPart mit angeben.

Muss ich da einen TYpen Ausdenken oder wird der aus der Datei genommen?
 

wer112

Top Contributor
Denn typ denn du in deimem php benutzen willst.
Also das Umändern?
Java:
public class DataPart {
        private String fileName;
        private byte[] content;
        private String type;

        public DataPart() {
        }

        public DataPart(String name, byte[] data, String format) {
            fileName = name;
            content = data;
            type = format;
        }

Und dann die Param so machen:

Java:
 @Override
            protected Map<String, DataPart> getByteData() {
                Map<String, DataPart> params = new HashMap<>();

                byte[] zipArray = getArrayFromZip(zipUri);
                params.put("zip", new DataPart("E" + kundennummer + ".zip", zipArray), "application/zip");

                return params;
            }
        };


Jetzt schein DataPart defekt, wird rot unterstrichen
 

KonradN

Super-Moderator
Mitarbeiter
Das ist doch ein Parameter zum Konstruktor - du hast es aber als Parameter vom put.

params.put("zip", new DataPart("E" + kundennummer + ".zip", zipArray, "application/zip"));

(Also die umgesetzte Klammer beachten!)
 

Oben