Výsledky 1 až 11 z 11

Téma: Upload velkých souborů pomocí JSP

  1. #1

    Standardní Upload velkých souborů pomocí JSP

    Nevěděl by někdo jak efektivně řešit upload např. 5GB velkýho souboru? Měl jsem na plánu něco jako buffer konstantní velikosti a když se naplní tak data zapsat na disk a znovu načitat data do bufferu. A tak pořád dokola dokud budou přicházet data. Měl by někdo lepší řešení?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  2. #2

    Standardní Re: Upload velkých souborů pomocí JSP

    Tak jak to píšeš, tak se to většinou dělá

  3. #3

    Standardní Re: Upload velkých souborů pomocí JSP

    Dík, takhle mě to zatim funguje pro soubory do cca 500MB. U vetších se nic nestane. Nenastavuje se někde v TomCatu max velikost soboru?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  4. #4

    Standardní Re: Upload velkých souborů pomocí JSP

    Mno ja bych pro takle velky soubory udelal neco sofistikovanejsiho, treba java aplet a webovou sluzbu prijimaci rozsekany soubor po mensich paketech...
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  5. #5

    Standardní Re: Upload velkých souborů pomocí JSP

    Citace Původně odeslal MEluZíNa Zobrazit příspěvek
    Mno ja bych pro takle velky soubory udelal neco sofistikovanejsiho, treba java aplet a webovou sluzbu prijimaci rozsekany soubor po mensich paketech...
    Asi máš pravdu, protože přes http nepujde poslat velký soubor, jelikož conntent-length v http headeru je typu int, takže pro vetší soubory přeteče. Přes ten applet myslíš na serveru vytvořit aplikaci, která bude přijmat datovej stream z apletu?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  6. #6

    Standardní Re: Upload velkých souborů pomocí JSP

    Ještě jsem narazil na problém. Když posílám data na server pomocí metody write třídy DataOutputStream (v cyklu je plnen buffer a pak je odesilan)

    Kód:
    vystup.write(buffer,0,nactenoCelkem);
    a na serveru je přijmám metodou read třídy DataInputStream (v cyklu je plnen buffer a pak je zapsan)

    Kód:
    nacteno = vstup.read(buffer,nactenoCelkem,velikostBufferu-nactenoCelkem);
    tak nevim jak na serveru zjistit zda byli odeslany všechny data. Klient dokončí odesílání dat a server stále čeká na data. Když u klienta zavřu výstupní stream, tak server čekat přestane. Dalo by se to řešit jinak, aniž bych musel zavírat outputStream?
    Naposledy upravil Chuck; 16.03.2010 v 11:36.
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  7. #7

    Standardní Re: Upload velkých souborů pomocí JSP

    Podle me ne (resp ano, poslat specialni sekvenci bajtu, podle niz to poznas). V cem je problem, ze ti vadi Stream zavrit?
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  8. #8

    Standardní Re: Upload velkých souborů pomocí JSP

    Protože bych pak ještě potřeboval přijmout potvrzení od serveru, že byl soubor úspěšně nahrán. Když Output stream zavřu, tak se mi zavře i Input stream. Myslel jsem že jsou na sobě nezávislý... Po zavření se mi ho nepodaří znova otevřít, resp. nevim jak...

    Kdybych tam poslal sekvenci bajtu, tak bych na serveru musel každý přijatý buffer kontrolovat zda neni posledni... I kdyz to by nebylo tak hrozny. dejme tomu, že by byl buffer delky 100B a na prvních 99 by byli data a na poslednim bajtu by byl identifikátor zda jsou tyto data posledni.
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  9. #9

    Standardní Re: Upload velkých souborů pomocí JSP

    Moh bys jeste jednou priblizit jak to delas? Posles normalne HTTP POST request jehoz obsahem je ten soubor? Nejlip kdyz posles kus zdrojaku, takle moc nevim jak to mas.
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  10. #10

    Standardní Re: Upload velkých souborů pomocí JSP

    Ne, přes http to neni. Na serveru běží démon co přijmá spojení od klientu a vytváří vlákna pro příjem dat od klientů.
    Spojení navazuji pomoci tříd Socket a ServerSocket.

    Vysvětlivky:
    vstup - DataInputStream
    vystup -DataOutputStream
    cteni - FileInputStream
    zapis - FileOutputStream

    klient:
    Kód:
                byte buffer[] = new byte[velikostBufferu];
                int nacteno=0;
                long nactenoCelkem=0;
                while (nacteno!=-1){
                    nacteno = cteni.read(buffer,nactenoCelkem,velikostBufferu-nactenoCelkem); //cteni ze souboru
                    if (nacteno!=-1){
                        nactenoCelkem+=nacteno;    
                    }
                    if ((nactenoCelkem+10000>=velikostBufferu) || (nacteno == -1)){
                        vystup.write(buffer,0,nactenoCelkem);
                        if (nacteno!=-1){   
                            nacteno = 0;
                        }else{
                           vystup.close();
                        }
                        nactenoCelkem = 0;
                    }  
                }
    server
    Kód:
                while (nacteno!=-1){
                    nacteno = vstup.read(buffer,nactenoCelkem,velikostBufferu-nactenoCelkem);  //cteni dat ze socketu    
                    if (nacteno!=-1){    // pokud byli nacteny data
                        nactenoCelkem += nacteno;
                    }
                    if ((nactenoCelkem+10000>=velikostBufferu) || (nacteno == -1)){ //jestlize je buffer plny(je tam rezerva aby nepretekl) nebo nebyli nacteny data
                        zapis.write(buffer,0,nactenoCelkem); //zapis do souboru
          
                        if (nacteno!=-1){
                            nacteno = 0;
                        }
                        nactenoCelkem = 0;
                    }
                }
    takhle to funguje kdyz se zavre ten OutputStream u klienta. Tim vrati metoda read na serveru -1
    Naposledy upravil Chuck; 16.03.2010 v 14:41.
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  11. #11

    Standardní Re: Upload velkých souborů pomocí JSP

    Tak jsem na to přišel. Ten OutputStream se musi zavirat na socketu metodou
    Kód:
    socket.shutdownOutput();
    a ne na DataOutputStreamu který jsem získal a zavíral takto
    Kód:
    vystup = new DataOutputStream(socket.getOutputStream());
    vystup.close();
    Teď jestli mam ten vystup na konci zavirat taky. Asi jo. Žádnou vyjímku to nehází...

    Docela by mě zajímalo jestli lze ten output na socketu znovu otevřít...
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. PHP > prepisovani dat v souboru pomoci web stranky
    Založil Atreides v sekci fóra Programování
    Odpovědí: 10
    Poslední příspěvek: 09.12.2009, 21:23
  2. obnoveni velkych souboru na NTFS disku
    Založil Poofy v sekci fóra Pevné disky a řadiče
    Odpovědí: 5
    Poslední příspěvek: 30.08.2009, 22:12
  3. upload a download pomoci php
    Založil Jack68 v sekci fóra Programování
    Odpovědí: 3
    Poslední příspěvek: 09.08.2009, 21:10
  4. Upload souboru na server - hlaseni
    Založil mudboy v sekci fóra Programování
    Odpovědí: 1
    Poslední příspěvek: 16.02.2004, 10:07
  5. Win98SE a kopírování velkých souborů
    Založil georg v sekci fóra Ostatní operační systémy
    Odpovědí: 4
    Poslední příspěvek: 28.12.2002, 23:28

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •