Autore Topic: Download immagini , audio e video da server web  (Letto 2119 volte)

Offline Nokias

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Download immagini , audio e video da server web
« il: 24 Maggio 2011, 15:43:42 CEST »
0
Buongiorno a tutti..volevo chiedervi un aiuto riguardo il download di immagini ,audio e video da un server web.
L'opzione di download è perfettamente funzionante con questo codice:
Codice (Java): [Seleziona]
private static File getImage(String filename) {
    String localFilename = new File(filename).getName();

    File img = new File("/sdcard/app/tmp/" + localFilename);

    // Create directories
    new File("/sdcard/app/tmp/").mkdirs();

    // only download new images
    if (!img.exists()) {
        try {
            URL imageUrl = new URL("[url=http://example.com/images/"]IANA — Example domains[/url] + filename);
            InputStream in = imageUrl.openStream();
            OutputStream out = new BufferedOutputStream(new FileOutputStream(img));

            for (int b; (b = in.read()) != -1;) {
                out.write(b);
            }
            out.close();
            in.close();
        } catch (MalformedURLException e) {
            img = null;
        } catch (IOException e) {
            img = null;
        }
    }
    return img;
}

Il problema sorge quando vado a scaricare file audio o video di dimensioni modeste diciamo.
Scaricando un file mp3 da 2,9 MB ci vogliono all'incirca 45 minuti!! o_O

Devo cercare in qualche modo di ridurre questo tempo perchè per soli 3 MB è decisamente elevato!!...c'è qualcosa che posso fare??

Grazie mille!!

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Download immagini , audio e video da server web
« Risposta #1 il: 24 Maggio 2011, 15:50:00 CEST »
0
Non usare i semplici InputStream ma i BufferedInputStream. Trovi tantissimi tutorial su internet! ;)

Offline Nokias

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Download immagini , audio e video da server web
« Risposta #2 il: 24 Maggio 2011, 15:52:01 CEST »
0
Dici che sono molto più veloci??

Offline Nokias

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Download immagini , audio e video da server web
« Risposta #3 il: 24 Maggio 2011, 18:23:42 CEST »
0
Ho provato ad utilizzare questo codice ma comunque il tempo è davvero moltissimo!!
Codice (Java): [Seleziona]
package com.helloandroid.imagedownloader;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
 
import org.apache.http.util.ByteArrayBuffer;
 
import android.util.Log;
 
public class ImageManager {
 
        private final String PATH = "/data/data/com.helloandroid.imagedownloader/";  //put the downloaded file here
       
 
        public void DownloadFromUrl(String imageURL, String fileName) {  //this is the downloader method
                try {
                        URL url = new URL("[url=http://yoursite.com/"]eCommerce Hosting, Web Hosting, eMail Hosting, from Yoursite.Com.[/url] + imageURL); //you can write here any link
                        File file = new File(fileName);
 
                        long startTime = System.currentTimeMillis();
                        Log.d("
ImageManager", "download begining");
                        Log.d("
ImageManager", "download url:" + url);
                        Log.d("
ImageManager", "downloaded file name:" + fileName);
                        /* Open a connection to that URL. */
                        URLConnection ucon = url.openConnection();
 
                        /*
                         * Define InputStreams to read from the URLConnection.
                         */
                        InputStream is = ucon.getInputStream();
                        BufferedInputStream bis = new BufferedInputStream(is);
 
                        /*
                         * Read bytes to the Buffer until there is nothing more to read(-1).
                         */
                        ByteArrayBuffer baf = new ByteArrayBuffer(50);
                        int current = 0;
                        while ((current = bis.read()) != -1) {
                                baf.append((byte) current);
                        }
 
                        /* Convert the Bytes read to a String. */
                        FileOutputStream fos = new FileOutputStream(file);
                        fos.write(baf.toByteArray());
                        fos.close();
                        Log.d("
ImageManager", "download ready in"
                                        + ((System.currentTimeMillis() - startTime) / 1000)
                                        + "
sec");
 
                } catch (IOException e) {
                        Log.d("
ImageManager", "Error: " + e);
                }
 
        }
}

C'è qualcuno che puoi darmi una mano? No perchè visto che devo sincronizzare un database pieno di immagini audio e video in questo modo ci metterei un'intera giornata!! o_O

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Download immagini , audio e video da server web
« Risposta #4 il: 24 Maggio 2011, 21:05:52 CEST »
0
Non leggere i byte uno per uno! Usa , int, int)]read(byte[], int, int)

E comunque ti ripeto, trovi un boato di tutorial su internet su come usare al meglio i BufferedInputStream!


Offline Nokias

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Download immagini , audio e video da server web
« Risposta #5 il: 24 Maggio 2011, 21:12:07 CEST »
0
Ma dici che potrebbe essere necessaria una conversione in base64??

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Download immagini , audio e video da server web
« Risposta #6 il: 24 Maggio 2011, 22:06:32 CEST »
0
Ma dici che potrebbe essere necessaria una conversione in base64??

No.

Offline Nokias

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Download immagini , audio e video da server web
« Risposta #7 il: 24 Maggio 2011, 22:15:28 CEST »
0
Anche se sto cercando molto in giro ancora non ho trovato un tutorial funzionante sul BufferedInputStream...non è che me ne potresti linkare uno funzionante così da adattarlo al mio problema.
La mia funzione è quella di scaricare un'immagine o ad esempio un video dal server web e salvarlo in locale.

Grazie mille veramente per l'aiuto che mi stai dando!!