13

I am developing an app in which I want to download image from URL. I need to download these images at once and stored it into internal storage. There are more than 200 images for downloading. Please tell me the best way to download these images at minimum time possible. If any third part library is available the please tell.

Marcus
  • 6,697
  • 11
  • 46
  • 89
Umesh Kumar Saraswat
  • 758
  • 3
  • 10
  • 28

4 Answers4

35

Consider using Picasso for your purpose. I'm using it in one of my project. To save image on external disk you can use following:

 Picasso.with(mContext)
        .load(ImageUrl)
        .into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                try {
                    String root = Environment.getExternalStorageDirectory().toString();
                    File myDir = new File(root + "/yourDirectory");

                    if (!myDir.exists()) {
                        myDir.mkdirs();
                    }

                    String name = new Date().toString() + ".jpg";
                    myDir = new File(myDir, name);
                    FileOutputStream out = new FileOutputStream(myDir);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);

                    out.flush();
                    out.close();                        
                } catch(Exception e){
                    // some action
                }
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
            }
        }
    );

From here you can download this library.

Airon Tark
  • 8,900
  • 4
  • 23
  • 19
Uniruddh
  • 4,427
  • 3
  • 52
  • 86
  • 1
    i want to download 200 images. for that i need to loop to download these images – Umesh Kumar Saraswat Apr 14 '15 at 11:45
  • @astuter can you explain me how to retrieve the image after saving it? – LS_ Dec 04 '15 at 15:33
  • 1
    @Signo: Check the answer of Dhawal Shoda parmar, in this link: http://stackoverflow.com/a/15918369/2571277 – Uniruddh Dec 04 '15 at 16:03
  • 1
    @astuter thank you very much for the quick response! :) I tried but with no luck, it says there's nothing if the ExternalStorage, now I'll do a little bit of debug to find out what's the issue, thanks again :) – LS_ Dec 04 '15 at 16:23
  • 1
    Thanks! i'm new in android and that was very helpful. – Seyyed Dec 28 '15 at 18:36
  • @UmeshKumarSaraswat you can retrieve the image from local file system as `Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView)`; – Harika Choudary Kanikanti Aug 06 '16 at 17:55
  • Better to create name as String name = new Date().getTime() + ".jpg"; if you have morethan 1 image to download at a time. – Sachin Varma Feb 14 '17 at 07:47
9

You can download th image from an url like this:

URL url = new URL("http://www.yahoo.com/image_to_read.jpg");
InputStream in = new BufferedInputStream(url.openStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while (-1!=(n=in.read(buf)))
{
   out.write(buf, 0, n);
}
out.close();
in.close();
byte[] response = out.toByteArray();

And you may then want to save the image so do:

FileOutputStream fos = new FileOutputStream("C://borrowed_image.jpg");
fos.write(response);
fos.close();
João Marcos
  • 3,872
  • 1
  • 19
  • 14
0
BitmapDrawable bitmapDrawable = (BitmapDrawable) holder.post_image.getDrawable();
                        Bitmap bitmap = bitmapDrawable.getBitmap();
                        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
                        MediaStore.Images.Media.insertImage(mContext.getContentResolver(), bitmap, "IMG_" + Calendar.getInstance().getTime(), null);

It is quite a simple job...

0
 const actionDownloadImage = (urls) => {
        urls.map((url) => {
            const splitUrl = url.split("/");
            const filename = splitUrl[splitUrl.length - 1];
            fetch(url)
                .then((response) => {
                    response.arrayBuffer().then(function (buffer) {
                        const url = window.URL.createObjectURL(new Blob([buffer]));
                        const link = document.createElement("a");
                        link.href = url;
                        link.setAttribute("download", filename); //or any other extension
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
                    });
                })
                .catch((err) => {
                    console.log(err);
                });
        });
    }