Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Download di file

    ciao, volevo sapere se è possibile fare una cosa del genere:
    dato un url di un file, scaricarlo in automatico (senza che esca la finestra "salva, apri, annulla") in un path che decido io!
    stex1984

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Quale applicazione dovrebbe fare questo?

    Una classica applicazione a finestre? Un applet? Una pagina Web?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    a me interessa semplicemente che lanciando il main, anche da console, il programma scarica un file che si trova su internet e lo salva in una directory...
    stex1984

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Qualcosa del tipo
    codice:
    File localFile = new File("percorso/nome_file");
    try {
      BufferedInputStream bis = new BufferedInputStream((new URL("url_file")).openStream(), 4096);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(localFileName), 4096);
    
            byte[] buf=new byte[4096];
            int byteRead;
            while ((byteRead=bis.read(buf,0,4096))>=0) {
              bos.write(buf,0,byteRead);
            }
            bis.close();
            bos.flush();
            bos.close();
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5

    molto bene!!!!

    beh, direi ottimo!!!!! grazie!!!
    ora voglio esagerare...
    si può modificare il codice in modo tale che il file venga scaricato da più thread?
    mi spiego... hai presente i download manager che attivano più thread per scaricare più velocemente il file? ecco!! intendo questo!
    si può fare?
    stex1984

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Eh, non lo so, non ci avevo mai pensato... il fatto è che quel codice l'ho utilizzato per scaricare una piccola quantità di piccoli file e non ho mai pensato a come ottimizzare la cosa per grandi file... se ho un po' di tempo libero nel prossimo fine settimana ci penso su... se nel frattempo ne vieni a capo tu, posta la soluzione per i posteri
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ancora meglio... vedi se questo ti piace
    http://users.csc.tntech.edu/~jley/csc3700/
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    mmm... davvero interessante!!! ma forse un po' complicatuccio da capire... (non sono un grande javaman!!!)... grazie cmq!!! :maLOL:
    senti... quel 4096 del tuo codice cosa indica?
    stex1984

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    4096 è la dimensione in bytes del buffer da utilizzare... puoi fare esperimenti e provare ad aumentarlo un po'... vedi se cambiano le prestazioni (cambi sostanziali) o se invece scarichi file corrotti.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora, prima che ti ci rompi la testa sopra, la tecnica generale NON è skippare bytes sul BufferedInputStream... ma creare una URLConnection e mandare i giusti parametri alla connessione. Per esempio

    codice:
          uc = url.openConnection();
          initByte = fileSize/totalsegments*segment;
          endByte = fileSize/totalsegments*(segment+1) -1;
          uc.setRequestProperty("Range", "bytes="+initByte+"-"+endByte);
    e quindi creando il bufferedInputStream su uc (che è URLConnection) con, ad esempio
    codice:
    BufferedInputStream bis = new BufferedInputStream(uc.getInputStream(),
                4096);
    ottieni di fargli leggere il file a pezzi secondo il numero di segmenti (totalsegments) e il segmento corrente (segment da 0 a n-1)

    Lascio a te il come ricomporre il tutto in un unico file (suppongo con RandomAccessFile).
    Ciao.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.