Як мець аплет trasmit Адпраўка малюнка на вэб-сервер

Я працую на аплет, які ўзаемадзейнічае з сігнатурай пляцоўкай і можа запісваць малюнак у файл з гэтым кодам:

sigObj.setImageXSize(30);
sigObj.setImageYSize(10);
sigObj.setImageJustifyMode(5);
sigObj.setImagePenWidth(5);
BufferedImage sigImage = sigObj.sigImage();
try
{
int w = sigImage.getWidth(null);
int h = sigImage.getHeight(null);
int[] pixels = new int[(w * h) * 2];

sigImage.setRGB(0, 0, 0, 0, pixels, 0, 0);
FileOutputStream fos = new
FileOutputStream("c:\\_img\\sig.jpg");
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
jpeg.encode(sigImage);
fos.close();                            
}
catch (java.io.IOException exception) { System.out.println("Error IO Exception."); }

Мэта складаецца ў перадаванае файл на вэб-серверы і ў канчатковым выніку пакласці .jpg або .bmp малюнак да згустку Oracle. Які самы лепшы спосаб зрабіць гэта?

Проста адгадаць тут:

Метад 1:
Ёсць аплет запісу файла .jpg ў выглядзе шасціграннай кадуюцца радкі, перамесціце радок ў схаваным поле формы, а затым прадставіць на старонку, дзе аракул можа прачытаць схаванае поле і пераўтварыць яго ў двайковы аб'ект у PL/SQL з blobVar: = HEXTORAW (URL ( 'sigJpg'));

Спосаб 2:
Ёсць аплет зрабіць POST і адправіць файл

Мая ява навыкі даволі зялёны, так што я не на 100% упэўнены, што калі адзін з гэтых метадаў рэкамендуюцца. Пасля таго, як файл будзе перамешчаны на вэб-сервер, я ўпэўнены, што я магу знайсці спосаб, каб запхнуць яго ў БД з дапамогай Oracle PL/SQL. Я не ўпэўнены, як атрымаць файл на вэб-серверы.

1

2 адказы

Your method 2 is the method you should implement. Actually it is not a so huge problem. Here is a good example for you: http://www.exampledepot.com/egs/java.net/Post.html

Вы павінны напісаць свой вобраз на паток вы атрымаеце ад злучэння URL менавіта так, як вы робіце, калі вы пішаце яго ў файл.

Але гэтага недастаткова. Вы павінны рэалізаваць на боку сервера. Як правіла, вы павінны рэалізаваць сэрвлета і перавызначыць яго doPost() метад, дзе вы атрымаеце ўтрыманне вашага паста. Затым зрабіце тое, што вам трэба: адкрытае злучэнне JDBC і запіс файла ў БД. Хоць я не рэкамендую гэты падыход: вы не маеце нічога агульнага з BLOB-в БД. Я думаю, што лепшы спосаб гэта напісаць файл у файлавай сістэме і захоўваць толькі шлях да яго ў БД.

Я спадзяюся, што я даў вам дастаткова саветаў. Вы можаце знайсці больш падрабязную інфармацыю па 2 хвіліны googleing. Поспехаў.

0
дададзена
Выкарыстоўваючы прыклад, малюнак запісваецца ў сувязі URL (і ніколі не датыкаецца да лакальнай файлавай сістэмы). Нічога сабе, гэта было б нядрэнна. Я не хачу выкарыстоўваць JDBC. На вэб-старонцы, што аплет налады ў сесіі мае/печыва інфармацыю. На самай справе было б добра, калі гэта таксама перадаецца з POST HTTP (калі гэта не ўжо).
Акрамя захавання выявы ў BLOB дазваляе лёгка абмежаваць, хто можа бачыць яго без неабходнасці .access файлаў.
дададзена аўтар Brian McGinity, крыніца

Зразумеў працуе. Я знайшоў пасаду з 2004 года, калі хто-то робіць тое ж самае. Адзінае адрозненне складаецца ў Я ператвараюся файл у шаснаццатковым радок перад праводкай. Адзіная прычына, чаму я гэта раблю, таму што я ведаю, як ператварыць шаснаццатковы радок у двайковы аб'ект у Oracle.

private String byteToString(byte[] data) {

    String text = new String();

    for ( int i = 0; i < data.length; i++ )
        text += (char) ( data[i] & 0x00FF );
    return text;
}

private static String bytesToHexString(byte[] bytes) {   
    StringBuilder sb = new StringBuilder(bytes.length * 2);   

    Formatter formatter = new Formatter(sb);   
    for (byte b : bytes) {   
        formatter.format("%02x", b);   
    }   

    return sb.toString();   
}  


public void writeImageToServer(URL scriptURL, BufferedImage img){
 try {
        ByteArrayOutputStream jpegOutput = new ByteArrayOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(jpegOutput);

        encoder.encode(img);//imagedata are coded here

        HttpURLConnection urlConnection = (HttpURLConnection)
        scriptURL.openConnection();
        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        urlConnection.setUseCaches(false);

        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");

        byte[] imageData = jpegOutput.toByteArray();

        //String imageString = byteToString(imageData);    //if you want a string
        String imageString = bytesToHexString(imageData);  //if you want hex string
        String content = "img=" + URLEncoder.encode (imageString,"UTF-8");

        urlConnection.setRequestProperty("Content-length", String.valueOf(content.length()));

        OutputStream urlout = urlConnection.getOutputStream();

        DataOutputStream printOut = new DataOutputStream(urlout);
        printOut.writeBytes(content);//writing data to the serverscript

        urlout.flush();
        urlout.close();
        printOut.flush();
        printOut.close();
        jpegOutput.flush();
        jpegOutput.close();

        urlConnection.disconnect();

        //System.err.println("Serverresponse: "+ urlConnection.getResponseMessage());

       //this works in firefox
        //try { getAppletContext().showDocument (new URL("javascript:msg(\""+ urlConnection.getResponseMessage() + "\")")); } catch (MalformedURLException me) { }

    }
    catch( IOException e ){ e.printStackTrace(); }
}

У аракула праз модуль mod_plsql:

procedure image_post_handeler ( img varchar2) is 
    b blob;
begin
    b := HEXTORAW( UTL_URL.UNESCAPE(url('img')) );
    insert into image_table (id,  b) values (id_seq.nextval, b  );  
end;

Для вытворчасці гатовы, ён павінен будзе мець магчымасць усталяваць злучэнне па пратаколе HTTPS і, магчыма, печыва. Я мог бы абысці пытанне печыва, калі я перадаць параметр URL.

Я магу прыняць рашэнне перадаць шаснаццатковы радок назад у браўзэр, змесціце яго ў схаваным поле ў форме затым адправіць форму.

Там могуць быць лепшыя спосабы зрабіць гэта. Гэта было надзвычай ездзіць навучання, як стварыць аплет, баночка класа, падпісаць, паставіць .dll файлаў паўсюль. Проста высветліць, што Java аплеты дома працуе ў быў выклік там каля 6, каля 32 біт і 64 біт няшмат.

Дзякуй за дапамогу. Гэта дало мне лепшае ўяўленне аб тым, што мне трэба, каб Google. Каментары вельмі высока.

0
дададзена
Congrats на растворы. Пераканайцеся ў тым, каб адзначыць свой адказ, як «прынята», так што іншыя могуць даведацца з вашага поспеху. прывітання ~
дададзена аўтар Andrew Kozak, крыніца
Пасля працы з гэтым на некаторы час, я знайшоў некалькі рэчаў: 1. HttpURLConnection можа апрацоўваць HTTPS злучэння. 2. Даданне дадатковых параметраў URL-адрас такі ж, як робіць GET URL, так што радок злучэння можа быць запісаная наступным чынам: «е = 1234 & IMG =» + imageString 3. Там няма неабходнасці кадзіраваць шаснаццатковай радкі або дэкадаваць яго ў БД , Шаснаццатковы радок не будзе ўтрымліваць ніякіх адмысловых знакаў.
дададзена аўтар Brian McGinity, крыніца