0

I want to download and save multiple images with Picasso library but I did not found how to save on the External Storage... (SD)

Picasso picasso = Picasso.with(context)
            .load(url)
            .into();

Is it possible?

Olivier Zoletti
  • 307
  • 1
  • 4
  • 14

1 Answers1

0

As far as i know it is not possible. Picasso only caches and downloads images asynchronously in separate thread.

I would suggest using Piccaso for caching and showing pictures and using an async task to download and save images to external storage.

   class DownloadFileFromURL extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        System.out.println("Starting download");
    }

    /**
     * Downloading file in background thread
     * */
    @Override
    protected String doInBackground(String... f_url) {
        int count;
        try {
            String root = Environment.getExternalStorageDirectory().toString();

            System.out.println("Downloading");
            URL url = new URL(f_url[0]);

            URLConnection conection = url.openConnection();
            conection.connect();
            // getting file length
            int lenghtOfFile = conection.getContentLength();

            // input stream to read file - with 8k buffer
            InputStream input = new BufferedInputStream(url.openStream(), 8192);

            // Output stream to write file

            OutputStream output = new FileOutputStream(root+"/downloadedfile.jpg");
            byte data[] = new byte[1024];

            long total = 0;
            while ((count = input.read(data)) != -1) {
                total += count;

                // writing data to file
                output.write(data, 0, count);

            }

            // flushing output
            output.flush();

            // closing streams
            output.close();
            input.close();

        } catch (Exception e) {
            Log.e("Error: ", e.getMessage());
        }

        return null;
    }



    /**
     * After completing background task
     * **/
    @Override
    protected void onPostExecute(String file_url) {
        System.out.println("Downloaded");
    }

}

You just call the above class using

    new DownloadFileFromURL().execute(<The url you want to download from>);

You will also need to add below permissions to Manifest file

  <uses-permission android:name="android.permission.INTERNET" />

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Hope it helps

Ragesh Ramesh
  • 3,470
  • 2
  • 14
  • 20