Base64 konvertierter URI String

wer112

Top Contributor
Ich habe immer noch probleme von Upload Daten.

KonradN hat unterem Vorgeschlagen: String base64Encoded = Base64.getEncoder().encodeToString(byteArray);
Ich weiß nicht wie ich das Umsetzen soll.

Habe eine einfache Methode gefunden, wie man ein Base64 Bitmap in ein String konvertiert und per Param in Volly an eine PHP Seite sendet.
Link:
(ist schon 6 Jahre alt)

Darauf hin wollte ich es umbauen mein Code und habe es vermischt ohne zu wissen was ich tue:

Java:
 private String zipToString(Context context, Uri uri) throws IOException {
        InputStream inputStream = context.getContentResolver().openInputStream(uri);
        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();

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

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

        byte[] zipBytes = byteBuffer.toByteArray();

        return Base64.encodeToString(zipBytes, Base64.DEFAULT);
    }




    private void MediaUpload(){


        //Upload URL
        String upload_url = "";


        RequestQueue queue = Volley.newRequestQueue(getActivity());

        StringRequest stringRequest = new StringRequest(Request.Method.POST, upload_url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                try {
                    JSONObject jsonObject = new JSONObject(response);
                    String Response = jsonObject.getString("response");
                    Log.e("Free Entwickler", "Upload: " + Response);

                } catch (JSONException e) {
                    Log.e("Free Entwickler", "JsonException: "+ e);
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Nullable
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> param = new HashMap<>();
                param.put("name", "E"+kundennummer);
                try {
                    param.put("zip", zipToString(getActivity(), Uri.parse(zipUri)));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                return param;
            }
        };
        queue.add(stringRequest);
    }

bekomme diese Fehlermeldung:

Code:
Vorderseite: /storage/emulated/0/Pictures/1698264297112.jpg
Passwort: 33g9t3i266k398ü4466p8.41R8.2669ü.3cj2k46
[4190] NetworkDispatcher.processRequest: Unhandled exception java.lang.RuntimeException: java.io.FileNotFoundException: No content provider: /storage/emulated/0/Download/Enull.zip
java.lang.RuntimeException: java.io.FileNotFoundException: No content provider: /storage/emulated/0/Download/Enull.zip
    at com..freeentwickler_registrieren$12.getParams(freeentwickler_registrieren.java:982)
    at com.android.volley.Request.getBody(Request.java:480)
    at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:283)
    at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:257)
    at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:89)
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
Caused by: java.io.FileNotFoundException: No content provider: /storage/emulated/0/Download/Enull.zip
    at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2020)
    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1849)
    at android.content.ContentResolver.openInputStream(ContentResolver.java:1525)
    at com..freeentwickler_registrieren.zipToString(freeentwickler_registrieren.java:928)
    at com..freeentwickler_registrieren.access$400(freeentwickler_registrieren.java:75)
    at com..freeentwickler_registrieren$12.getParams(freeentwickler_registrieren.java:980)
    at com.android.volley.Request.getBody(Request.java:480) 
    at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:283) 
    at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:257) 
    at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:89) 
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104) 
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132) 
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111) 
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

Ich wünsche ich könnte diese Art benutzen um eine Datei Hochzuladen, das ich mithilfe der UI das in ein Base64 String konventiere und ihn per Param übergebe:

Ich danke an alle unterstützer und wünsche einen schönen Mittwoch Abend
 
Sorry, ich bin nicht der große Android Entwickler. Aber teste einfach einmal diesen Weg, um die Datei zu lesen:

Java:
    private String zipToString(Context context, String filePath) throws IOException {
        File myFile = new File(filePath);
        try (InputStream inputStream = new FileInputStream(myFile)) {
            ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
            // ...
        }

Beim Aufruf dann das Uri.parse weglassen:
param.put("zip", zipToString(getActivity(), zipUri));
(Ich hoffe, dass in zipUri ein Pfad drin steht wie /sdcard/....)

Evtl. funktioniert das.

Ich habe da beim InputStream ein try with resources verwendet - das sollte auch im Android Studio zur Verfügung stehen oder ist die Java Version, die da verwendet wird, zu alt? Da dann ggf. das try (...) weglassen und die Zuweisung vom InputStream als einfaches Statement in die Zeile setzen.
 
Sorry, ich bin nicht der große Android Entwickler. Aber teste einfach einmal diesen Weg, um die Datei zu lesen:

Java:
    private String zipToString(Context context, String filePath) throws IOException {
        File myFile = new File(filePath);
        try (InputStream inputStream = new FileInputStream(myFile)) {
            ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
            // ...
        }
Ich weiß nicht ob der andere Code passt. Habe den Sting aus der Klasse genommen.
Beim Aufruf dann das Uri.parse weglassen:
param.put("zip", zipToString(getActivity(), zipUri));
(Ich hoffe, dass in zipUri ein Pfad drin steht wie /sdcard/....)
Da kommt daer Pfad raus: /storage/emulated/0/Download/E8551b100a86e.zip
Evtl. funktioniert das.

Ich habe da beim InputStream ein try with resources verwendet - das sollte auch im Android Studio zur Verfügung stehen oder ist die Java Version, die da verwendet wird, zu alt? Da dann ggf. das try (...) weglassen und die Zuweisung vom InputStream als einfaches Statement in die Zeile setzen.
Wenn ich das so mache:
Java:
 private String zipToString(Context context) throws IOException {
        zipUri = Environment.getExternalStorageDirectory() + "/Download/" + "E" + kundennummer + ".zip";

        File myFile = new File(zipUri);
        ByteArrayOutputStream byteBuffer;
        byte[] zipBytes = new byte[0];
        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);
            }

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



        return Base64.encodeToString(zipBytes, Base64.DEFAULT);
    }




    private void MediaUpload(){

        zipUri = Environment.getExternalStorageDirectory() + "/Download/" + "E" + kundennummer + ".zip";
        Log.e("Free Entwickler", "Pfad: " + zipUri);
        //Upload URL
        String upload_url = "";


        RequestQueue queue = Volley.newRequestQueue(getActivity());

        StringRequest stringRequest = new StringRequest(Request.Method.POST, upload_url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                try {
                    JSONObject jsonObject = new JSONObject(response);
                    String Response = jsonObject.getString("response");
                    Log.e("Free Entwickler", "Upload: " + Response);

                } catch (JSONException e) {
                    Log.e("Free Entwickler", "JsonException: "+ e);
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Nullable
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> param = new HashMap<>();
                param.put("name", "E"+kundennummer);
                String base64Encoded;
                try {
                    base64Encoded = java.util.Base64.getEncoder().encodeToString(zipToString(getActivity()).getBytes());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                param.put("zip", base64Encoded);

                return param;
            }
        };
        queue.add(stringRequest);

Bekomme ich diese Fehlermeldung:

Code:
FATAL EXCEPTION: Thread-267
                                                                                                    Process: , PID: 17370
                                                                                                    java.lang.OutOfMemoryError: Failed to allocate a 132087856 byte allocation with 25165824 free bytes and 122MB until OOM, target footprint 165083912, growth limit 268435456
                                                                                                        at java.util.Arrays.copyOf(Arrays.java:3161)
                                                                                                        at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:191)
                                                                                                        at .freeentwickler_registrieren.zipToString(freeentwickler_registrieren.java:938)
                                                                                                        at .freeentwickler_registrieren.access$400(freeentwickler_registrieren.java:64)
                                                                                                        at .freeentwickler_registrieren$12.getParams(freeentwickler_registrieren.java:987)
                                                                                                        at com.android.volley.Request.getBody(Request.java:480)
                                                                                                        at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:283)
                                                                                                        at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:257)
                                                                                                        at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:89)
                                                                                                        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)
                                                                                                        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:132)
                                                                                                        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
                                                                                                        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
 
Ok, damit klappt das Lesen, aber die Daten passen nicht in den Speicher.

Daher musst du die Daten in mehreren Requests abschicken denke ich mal. Es sei denn, du hast einen Einfluss auf die Bildergröße.
 
Alternativ kann man schauen, ob man die Daten auch über ein File Upload senden könnte statt über so einzelne Requests. Dann musst du weniger Manuell machen.

Aber wie gesagt: mit Android habe ich kaum etwas am Hut. Vor paar Jahren mal eine App gemacht - das war es schon.
 
Naja, Dir geht halt der Speicher aus. Nimm mal ein kleineres Bild.
Es ist ein Zip Ordner vo bis zu vier daten reinmüssen. Und das Foto wird mit der Intent Kamera gemacht, da kann ich kein Kleineres Bild machen.
Ok, damit klappt das Lesen, aber die Daten passen nicht in den Speicher.
Kann man den Speicher größer bekommen?
Daher musst du die Daten in mehreren Requests abschicken denke ich mal. Es sei denn, du hast einen Einfluss auf die Bildergröße.
Also kann man das Zip splittern und irgendwie in PHP zusammenführen zu ein Archiv wieder?
 
Kann man den Speicher größer bekommen?
Die Geräte haben nun einmal begrenzten Hauptspeicher. Und Du willst ja auch ältere Geräte unterstützen.

Also kann man das Zip splittern und irgendwie in PHP zusammenführen zu ein Archiv wieder?
Ja, natürlich. Aber dazu musst Du vermutlich Dein Code etwas mehr anpassen. Du musst dann halt mehrere Requests senden. Jeweils nacheinander.

Du wirst vermutlich die Größe der Datei abfragen können von der File Instanz, die Du ja zuerst erstellt hast.

Und dann ist die Frage, wie groß die Pakete sein dürfen. Einen entsprechenden Puffer erstellst Du dann einfach. Da braucht man dann auch keinen ByteBufferStream mehr.

Du hast ja schon eine Schleife:
Java:
        try (InputStream inputStream = new FileInputStream(myFile)) {
            byteBuffer = new ByteArrayOutputStream();
            // ...
            byte[] buffer = new byte[BUFFER_SIZE_TO_USE];
            int len;

            int counter = 1;
            while ((len = inputStream.read(buffer)) != -1) {
                // Send buffer in a single request together with len and counter!
                counter++;
            }

Der Code, der alle Requests sendet muss diese Schleife durchlaufen. Der Kommentar muss dann natürlich ein Funktionsaufruf sein, der den Request versendet. Du solltest da len und counter mitgeben. Dann kann der Empfänger am Ende alles zusammen bauen.
Evtl. kann man auch am Ende ein Request abschicken, der das Zusammenfügen erst in Bewegung setzt. Dann schreibst du halt viele kleine Dateien mit .<counter> ... also du hast dann sowas wie bilder.zip.1, bilder.zip.2, bilder.zip.3 .. am Ende kommt dann der Request, dass 3 Pakete da sein müssen und diese zusammen gesetzt werden sollen, also kann man bilder.zip.1, ....2, ...3 einlesen und alles in bilder.zip zusammen fügen.

Wäre eine Lösung. Wobei ich nicht sicher bin, dass dies ein guter Weg ist. Evtl. sollte man statt Volley eine Library nutzen, die Requests ermöglicht, bei denen man den Body über ein Stream bereit stellen kann. Dann würde man den Request erstellen und einfach alles in den Body streamen. Aber das ist ein anderes Thema.
 
Wobei ich nicht sicher bin, dass dies ein guter Weg ist. Evtl. sollte man statt Volley eine Library nutzen, die Requests ermöglicht, bei denen man den Body über ein Stream bereit stellen kann. Dann würde man den Request erstellen und einfach alles in den Body streamen. Aber das ist ein anderes Thema.
Da möchte ich mal anknüpfen. @wer112, Du versuchst etwas über ein Format zu realisieren, das für die Übertragung von Binärdaten nicht wirklich geeignet ist: JSON ist ein Textformat. Das geht prinzipiell natürlich (z. B. über Base64-Kodierung), ist aber gerade für große Datenmengen unsinnig.
 
Da möchte ich mal anknüpfen. @wer112, Du versuchst etwas über ein Format zu realisieren, das für die Übertragung von Binärdaten nicht wirklich geeignet ist: JSON ist ein Textformat. Das geht prinzipiell natürlich (z. B. über Base64-Kodierung), ist aber gerade für große Datenmengen unsinnig.
wie soll ich bitte am besten das zip an den Server senden? Wie mache ich das mit php ?
 
Ist es denn wirklich notwendig das die Bilder in voller Auflösung übertragen werden müssen?

Bedenke das die zu übertragenden Daten durch die Base64 Kodierung auch größer ist als dei Datei selber.
 
Zuletzt bearbeitet:
Der Standardweg in PHP dürfte über einen Request-Body vom Typ multipart/form-data sein. Für eine einzelne Datei kannst Du das noch ganz gut zu Fuß machen. In PHP müsstest Du über die $_FILES-Variable darauf zugreifen können.

Hier mal Code von Chat-GPT, natürlich ungetestet:
Java:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class FileUploader {

    public static void uploadFile(String serverUrl, String filePath) throws Exception {
        // Create a file object with the file to be uploaded
        File fileToUpload = new File(filePath);

        // Create the connection to the server
        URL url = new URL(serverUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        // Set the necessary request properties for a multipart/form-data POST request
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + "*****");

        // Create the output stream to write the file data
        DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());

        // Construct the multipart/form-data request
        outputStream.writeBytes("--*****\r\n");
        outputStream.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileToUpload.getName() + "\"\r\n");
        outputStream.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

        // Read the file and write it to the output stream
        FileInputStream fileInputStream = new FileInputStream(fileToUpload);
        int bytesRead;
        byte[] buffer = new byte[1024];
        while ((bytesRead = fileInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }

        fileInputStream.close();

        // Finish the multipart/form-data request
        outputStream.writeBytes("\r\n");
        outputStream.writeBytes("--*****--\r\n");
        outputStream.flush();
        outputStream.close();

        // Get the response from the server
        int responseCode = connection.getResponseCode();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = reader.readLine()) != null) {
            response.append(inputLine);
        }
        reader.close();

        // Display the server response
        System.out.println("Server Response: " + response.toString());

        // Close the connection
        connection.disconnect();
    }

    public static void main(String[] args) {
        String serverUrl = "https://example.com/upload"; // Replace with the actual server URL
        String filePath = "path_to_your_file"; // Replace with the path to the file you want to upload
        try {
            uploadFile(serverUrl, filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
Request-Body vom Typ multipart/form-data
Das hatten wir im letzten Thread und er hat sich nun für diese variante entschieden.

Nur eines er will es in Android machen und da Netzwerk Zugriffe nicht im Mainthread.
 
Da würde ich zu Retrofit2 tendieren.


Versuche grade das zu verstehen. Fehlt mir noch Schwer.

1.bei der Klasse: ApiConfig.class, steht das Rot:
Java:
 or
    @POST

2. was kommt dort rein: ("/images/upload")
3 Muss uploadImage wie die Upload Klasse heißen?
4. Was bedutet image bei @Part MultipartBody.Part image?
5. was bedutet uploaded_file bei MultipartBody.Part body = MultipartBody.Part.createFormData(\"uploaded_file\", file.getName(), requestFile);? Ist das der POST Name für PHP?

6. die MEthode gibt es nicht: .client(getUnsafeOkHttpClient())

7. Call call = api.editUser(\"Your URL\",body); editUser gibt bes nicht und muss man die Upload URL auch darein schreiben, obwohl man das mit BASE_URL schon gemacht hat?

8. Wie wird der PHP Teil aussehen?

9. Der Teil vom Code stimmt nicht laut AS:

Java:
 try {
                      
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                pd.dismiss();
            }
            @Override
            public void onFailure(Call call, Throwable t) {
//                Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
                pd.dismiss();
                Log.e(\"response_failure\",t.toString());
            }
        });
    }
  
}
 
2. was kommt dort rein: ("/images/upload")
Hier kommt der Context Anteil des Pfades zu deiner Web-Anwendung.

3 Muss uploadImage wie die Upload Klasse heißen?
Nein, siehe vorherige Antwort

4. Was bedutet image bei @Part MultipartBody.Part image?
Das ist der Parametername.

5. was bedutet uploaded_file bei MultipartBody.Part body = MultipartBody.Part.createFormData(\"uploaded_file\", file.getName(), requestFile);? Ist das der POST Name für PHP?
Ja

6. die MEthode gibt es nicht: .client(getUnsafeOkHttpClient())
Dann fehlen dir Abhängigkeiten. Diese sind in dem Tutorial beschrieben.

7. Call call = api.editUser(\"Your URL\",body); editUser gibt bes nicht und muss man die Upload URL auch darein schreiben, obwohl man das mit BASE_URL schon gemacht hat?

Ich kenne die API nicht. Das Tutorial ist hier auch komisch beschrieben. Da es nur zwei Alternativen gibt, kann man beide schnell ausprobieren.

editUser müsste eigentlich auch im interface ApiConfig definiert worden sein. Vermutlich ist das Tutorial inkonsistent an der Stelle. Habe mir das auch nicht vollständig durchgelesen.

8. Wie wird der PHP Teil aussehen?

Wir sind ein Java Forum. Hierfür benötigt man auch gute PHP Kentnisse. In der Regel wird dies aber einfach ein Endpunkt sein, der in $_POST die entsprechenden Daten erhält.

Wie man das im Detail in PHP macht, überspringe ich hier.

9. Der Teil vom Code stimmt nicht laut AS:

Und was stimmt nicht?

Ich weiß nicht, warum das Tutorial die " überall escaped. Kann mir nicht vorstellen, dass das richtig ist.

Log.e(\"response_failure\",t.toString());

Dementsprechend wäre das hier zu escapen auch nicht richtig.
 
Ja aber du kannst anschließend das Bild (Bitmap) Skalieren. Bevor du es speicherst und zipst.

Wo ist da das Problem. Das Skalieren wird doch auch in dem Tutorial vom Multiform gezeigt.
Leider wird nicht Skalliert wenn ich das so mache und es speichert davor schon ab. wie skalliere ich es:

Habe das probiert:
Java:
 ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, "Personalausweiß Vorderseite");
            values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung der Person.");

            persovorURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

            Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            camera.putExtra(MediaStore.EXTRA_OUTPUT, persovorURI);

            try {
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                persoVorBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), persovorURI);
                persoVorBitmap.compress(Bitmap.CompressFormat.PNG, 60, outputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
 
Nach dem Komprimieren solltest du den OutpuStream auch speichern wenn du damit weiter arbeiten willst.
Denn in Ihn sind jetzt die Komprimierten daten.

Oder du benutzt ihn gleich weiter für die Erstellung des Zip wenn das deine Lib zulässt. Musst du wissen diene Lib.
 
Nach dem Komprimieren solltest du den OutpuStream auch speichern wenn du damit weiter arbeiten willst.
Denn in Ihn sind jetzt die Komprimierten daten.

Oder du benutzt ihn gleich weiter für die Erstellung des Zip wenn das deine Lib zulässt. Musst du wissen diene Lib.
Lieber Fileoutbutsream nehmen oder dieses Byteoutputstream?
Wie speichere ich das ab?
 
Zip4j

new ZipFile("filename.zip").addStream(inputStream, new ZipParameters());
Java:
String specialWord = filenamePersoVorder + "Rückseite" + filenamePersoRück + "vorderseite" + "abcfghijklmnpquvwxyz";

        char[] chars = specialWord.toCharArray();
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 100; i++) {
            char c = chars[random.nextInt(chars.length)];
            sb.append(c);
        }

        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setEncryptFiles(true);
        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
        zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);

        String password = sb + "";
        Log.e("Free Entwickler", "Passwort: " + password);

        String path = Environment.getExternalStorageDirectory() + "/Download/";
        // new ZipFile(path + "Personaldaten.zip").addFiles(Arrays.asList(new File(getRealPathFromURI(persovorURI)), new File(getRealPathFromURI(persorückURI))));

        Map<String, String> fileNamesMap = new HashMap<>();
        fileNamesMap.put(filenamePersoVorder, "personalausweis_vorderseite.jpg");
        fileNamesMap.put(filenamePersoRück, "personalausweis_rückseite.jpg");

        List<File> filesToAdd = Arrays.asList(
                new File(getRealPathFromURI(persovorURI)),
                new File(getRealPathFromURI(persorückURI))
        );

        ZipFile zipFile = new ZipFile(path + "E" + kundennummer + ".zip", password.toCharArray());
        zipFile.addFiles(filesToAdd, zipParameters);

        new ZipFile(path + "E" + kundennummer + ".zip").renameFiles(fileNamesMap);
soll ich den outputstream in die Liste machen oder wie?
 
Zwischen deinen Postings vergehen keine 2 Minuten.

Sicher, dass du dich damit richtig auseinandersetzt? Irgenwie glaube ich, dass hier jede Menge Grundlagen fehlen und das hier zu keinen Erfolg führen wird.

Vor allem weil hier hundert Themen gleichzeitig evaluiert werden. Und von REST haben wir uns schon wieder weit entfernt.
 
PS und auch der Code denn du hier
https://www.java-forum.org/thema/volleymultipartrequest.203113/
gefunden benutzt hast geht ohne die Änderungen von Konrad.

Natürlich musst du das PHP anpassen. ( Daten Größe, extension zip…)

Für dein Backend PHP würde ich dir vielleicht empfehlen es erst mal mit Postman zu testen nicht mit der APP.
Dann weist du ob den PHP fehlerfrei ist . Du hast sonnst immer zwei Baustellen und suchst dich Tod.
 
Zuletzt bearbeitet:
PS und auch der Code denn du hier
https://www.java-forum.org/thema/volleymultipartrequest.203113/
gefunden benutzt hast geht ohne die Änderungen von Konrad.

Natürlich musst du das PHP anpassen. ( Daten Größe, extension zip…)

Für dein Backend PHP würde ich dir vielleicht empfehlen es erst mal mit Postman zu testen nicht mit der APP.
Wie teste ich das per POSTman?
Dann weist du ob den PHP fehlerfrei ist . Du hast sonnst immer zwei Baustellen und suchst dich Tod.
Wenn beides nicht funktioniert, weiß ich nicht, ob das funktioniert.
Das war mit Multipart kein Thema ca 80 MB gingen bei mir noch ohne Probleme
Da weiß ich nicht, wie ich das mitschicken kann und die Klasse hatt auch ihre Probleme. Wäre schön wenn es mit 80MB klappen würde, dann können potenzielle Entwickler apks in der Höhe auf den Server laden. Aber da kommen die Probleme, das ich zu doof bin alles unter einem Hut zu bekommen.

Wie lange hast du gebraucht mit den 80MB?
 
40 MB ist für die meisten Handys kein Thema . Geschwindigkeit Schwer zu sagen. Kommt auf den Server und auch auf das Handy sowie Netz an.

Ich habe es mit einer 40 MB Datei versucht. Mit einem Win Xampp Server da hat es schon bald 8 sec gedauert.
Habe aber auch ältere HW benutzt .

40 MB deshalb, weil ich den Xmapp nicht umstellen wollte auf einem größeren PHP Upload.
 

Zurück
Oben