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
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

wer112

Top Contributor
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)
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

wer112

Top Contributor
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?
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

mihe7

Top Contributor
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.
 

wer112

Top Contributor
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 ?
 

Jw456

Top Contributor
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:

mihe7

Top Contributor
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();
        }
    }
}
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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());
            }
        });
    }
  
}
 

Marinek

Bekanntes Mitglied
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.
 

wer112

Top Contributor
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();
            }
 

Jw456

Top Contributor
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.
 

wer112

Top Contributor
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?
 

wer112

Top Contributor
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?
 

Marinek

Bekanntes Mitglied
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.
 

Jw456

Top Contributor
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:

wer112

Top Contributor
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?
 

Jw456

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W UTF-8 String Android & Cross-Platform Mobile Apps 66
W String Array Pfad in Int setzen Android & Cross-Platform Mobile Apps 54
W Volley String Response gibt falchen if aus Android & Cross-Platform Mobile Apps 35
H Anfänger String types not allowed (at 'textColor' with value 'black' Android & Cross-Platform Mobile Apps 13
W Firestore String in Apps Laden Android & Cross-Platform Mobile Apps 10
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
C Zugriff auf die Position eines String- bzw Spinner-Arrays Android & Cross-Platform Mobile Apps 1
J Android String in andere Java-Dateien überführen Android & Cross-Platform Mobile Apps 1
J R.string.(variable) geht das Android & Cross-Platform Mobile Apps 3
R Android incomingNumber bein Eingehenden Anruf immer leerer String Android & Cross-Platform Mobile Apps 4
S SPLIT funktion bei STRING funktioniert nicht! Android & Cross-Platform Mobile Apps 4
G String an einen php Script senden Android & Cross-Platform Mobile Apps 8
J Plötzlich "java.lang.String cannot be converted to JSONObject" Android & Cross-Platform Mobile Apps 9
T int to string ... Android & Cross-Platform Mobile Apps 8
A String[] für Lisadapter Android & Cross-Platform Mobile Apps 4
M jsonobject cannot be cast to java.lang.string Android & Cross-Platform Mobile Apps 4
N Android Hilfe string to float geht nicht... Android & Cross-Platform Mobile Apps 4
J Einen String bewegen wie? Android & Cross-Platform Mobile Apps 3
R String wie WAV Datei nutzen Android & Cross-Platform Mobile Apps 4
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
L String dem Display anpassen Android & Cross-Platform Mobile Apps 12
G Text parsen String to Double Android & Cross-Platform Mobile Apps 2
S ein String nach vorgegebenen Zeichen teilen Android & Cross-Platform Mobile Apps 3
N Zeichen im String löschen? Android & Cross-Platform Mobile Apps 18
M MIDlet + Datum in String Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben