JSF und Bitmap String

  • Hey,


    Ich habe eine frage und zwar habe ich ein Bitmap dieses würde ich gerne auf einem Webserver speichern, meine Idee war mittels JavaServerFaces die Datei als String Hochzuladen, dort wird die Datei dann in ein Byte[] umgewandelt und in eine MySQL Datenbank gespeichert, nur leider scheint es als wäre der request zu lange, bei kurzen Strings funktioniert es einwandfrei, bei einer Formatierung Bitmap to String leider nicht.


    zb.
    Bitmap bitmap = getBitmap();
    String bitmapString = bitmaptoString(Bitmap);


    http://000.000.000.000/bitmap?bitmap=+bitmapString


    hat jemand eine Idee wie das funktionieren könnte? (wie bereits erwähnt bei einem kurzen String zb.: "abcsdsasad" funktioniert es bereits einwandfrei)

  • Hi,


    wahrscheinlich hast du ein String/Post Limit auf der Server-Seite. Kenne mich mit JSF jetzt nicht aus, aber vielleicht kann man dort oder im Tomcat? noch etwas einstellen.
    Alternativ, da du auf beiden Seiten Java hast, kannst du das Byte-Array auch direkt verschicken (das ist deutlich kleiner als ein String). Wie gesagt kennen ich mich mit JSF nicht aus, aber das sollte möglich sein.


    Allerdings halte ich es nicht für klug Bilder in die Datenbank zu speichern, da diese die Datenbank extrem groß machen (viel Spaß bei späteren Imports/Exports). Zudem wird die Datenbank Performance enorm leiden.
    Besser wäre es die Datei auf einen File-Server(S3,Ceph,oder einfach Festplatte) zu speichern und in der Datenbank nur ein Verweis hinzuzufügen.

  • so jetzt habe ich es der web Server nimmt die daten an.
    allerdings habe ich jetzt eine kleines für mich nicht verständliches Problem in meiner app.
    und zwar geht es um die sechste Zeile im Codebeispiel 1, ganz hinten befindet sich der String der auch korrekt ist.(wurde mittels log überprüft)
    wenn ich die Datei so wie sie hier steht ausführe bekomme ich eine java.net.SocketTimeoutException: timeout.
    wenn ich allerdings den String direkt mittels " " einfüge funktioniert es ohne Probleme.
    siehe Codebeispiel 2, Zeile sechs.



    bsp1.)


    1 String mapViewScreenShot = ConvertBitmap.bitmapToString;
    2
    3 RequestBody requestBody = new MultipartBody.Builder()
    4 .setType(MultipartBody.FORM)
    5 .addFormDataPart("kalorien", kalorien)
    6 .addFormDataPart("mapdata", "bild", RequestBody.create(MediaType.parse("image/png"),mapViewScreenShot))
    7 .build();


    bsp2.)


    1 String mapViewScreenShot = ConvertBitmap.bitmapToString;
    2
    3 RequestBody requestBody = new MultipartBody.Builder()
    4 .setType(MultipartBody.FORM)
    5 .addFormDataPart("kalorien", kalorien)
    6 .addFormDataPart("mapdata", "bild", RequestBody.create(MediaType.parse("image/png"),"adwhsdbshdbhasbdj"))
    7 .build();


    ich hoffe es hat jemand eine Antwort parat :)
    Mit freundlich grüßen

  • Timeouts können an zwei Stellen passieren.
    1. Der Client wartet nicht lange genug auf dem Server
    2. Der Server braucht zu lange und beendet den Request


    So wie es hier aussieht, trifft Fall 1 zu.
    Der String vom der Bitmap ist natürlich um ein vielfache größer als "adwhsdbshdbhasbdj".
    Entsprechender länger braucht der Request zum Versenden, da mehr Daten übertragen werden müssen. (Zudem dauert eventuell für den Fall auch die Server-Verarbeitung länger?)
    Wahrscheinlich solltest du dein Request Timeout erhöhen.


    Beispiel für OkHttp (ich weiß jetzt nicht ob du die Library nutzt):


    Java
    client = new OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build();

    Damit hättest du ein 30 Sekunden Versand und Empfang Timeout, das sollte bei einer guten Internetverbindung locker reichen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!