How to Download a File from a Server and Save It in Specific Folder in Sd Card in Android

How to download a file from a server and save it in specific folder in SD card in Android?

Your download URL is not a link to any file. It's a directory. Make sure its a file and exists. Also check your logcat window for error logs. One more suggestion, its always better to do a printStackTrace() in catch blocks instead of Logs. Its gives a more detailed view of the error.

Change this line:

    URL url = new URL("http://myexample.com/android/");

to:

    URL url = new URL("http://myexample.com/android/yourfilename.txt"); //some file url

Next, in catch block, add this line:

e.printStackTrace();

Also in the directory path, it should be something like this:

File dir = new File(root.getAbsolutePath() + "/mnt/sdcard/myclock/databases");

instead of

File dir = new File(root.getAbsolutePath() + "/myclock/databases");

Next, make sure you have acquired permission for writing to external storage in Android manifest.

How to download the files in specific folder in internal storage

In Android studio to use internal Storage First of all add permission in manifest
Like this:

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

then to make new directory in internal storage use this line of code:

   File sdCardRoot = new File(Environment.getExternalStorageDirectory(), "MyProfile");

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

Log.e("check_path", "" + sdCardRoot.getAbsolutePath());

This is my full code:

In this code check directory is exist or not if directory is not exist then create directory
and use asyntask to download images from url

In this example i have use Java Language

Code

  MyAsyncTasks asyncTasks = new MyAsyncTasks();
asyncTasks.execute(Imageurl);

and AsyncClass:

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

File sdCardRoot;

@Override
protected String doInBackground(String... strings) {

HttpURLConnection urlConnection = null;
try {
URL url = new URL(strings[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();

sdCardRoot = new File(Environment.getExternalStorageDirectory(), "MyProfile");

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

Log.e("check_path", "" + sdCardRoot.getAbsolutePath());

String fileName =
strings[0].substring(strings[0].lastIndexOf('/') + 1, strings[0].length());
Log.e("dfsdsjhgdjh", "" + fileName);
File imgFile =
new File(sdCardRoot, fileName);
if (!sdCardRoot.exists()) {
imgFile.createNewFile();
}
InputStream inputStream = urlConnection.getInputStream();
int totalSize = urlConnection.getContentLength();
FileOutputStream outPut = new FileOutputStream(imgFile);
int downloadedSize = 0;
byte[] buffer = new byte[2024];
int bufferLength = 0;
while ((bufferLength = inputStream.read(buffer)) > 0) {
outPut.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
Log.e("Progress:", "downloadedSize:" + Math.abs(downloadedSize * 100 / totalSize));
}
Log.e("Progress:", "imgFile.getAbsolutePath():" + imgFile.getAbsolutePath());

Log.e(TAG, "check image path 2" + imgFile.getAbsolutePath());

mImageArray.add(imgFile.getAbsolutePath());
outPut.close();
} catch (IOException e) {
e.printStackTrace();
Log.e("checkException:-", "" + e);
}
return null;
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
imagecount++;
Log.e("check_count", "" + totalimagecount + "==" + imagecount);
if (totalimagecount == imagecount) {
pDialog.dismiss();
imagecount = 0;
}
Log.e("ffgnjkhjdh", "checkvalue checkvalue" + checkvalue);

}

}

How to download all files from server to SD-card

I have solved the problem by adding ivy jar file as a library and then added following code.

        try {
urlAudio = new URL("http://server/folder/uploadAudio");
} catch (MalformedURLException e) {
e.printStackTrace();
}
ApacheURLLister lister1 = new ApacheURLLister();
try {
myList = lister1.listAll(urlAudio);
} catch (IOException e) {
e.printStackTrace();
}
return null;

How to download file in my SD card folder in Android

use below code inside onCLick of download

  File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/myCustomFolderName");
dir.mkdirs();
File file = new File(dir, "you_garrit.mp4");
Uri uri = Uri.fromFile(file);

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL));
request.setTitle("You garrit");
request.setDescription("DownloadProgress sample");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationUri(uri);
request.allowScanningByMediaScanner();

downloadID = downloadManager.enqueue(request);
downloadProgressView.show(downloadID, new DownloadProgressView.DownloadStatusListener() {
@Override
public void downloadFailed(int reason) {
Log.d(TAG, "downloadFailed" + reason);
}

@Override
public void downloadSuccessful() {
Log.d(TAG, "downloadSuccessful");
}

@Override
public void downloadCancelled() {
Log.d(TAG, "downloadCancelled");
}
});
downloadButton.setVisibility(View.GONE);

please let me know if these dosen't work for you

How to save file from website to sdcard

You can use this method to download a file from the internet to your SD card:

public void DownloadFromUrl(String DownloadUrl, String fileName) {

try {
File root = android.os.Environment.getExternalStorageDirectory();

File dir = new File (root.getAbsolutePath() + "/xmls");
if(dir.exists()==false) {
dir.mkdirs();
}

URL url = new URL(DownloadUrl); //you can write here any link
File file = new File(dir, fileName);

long startTime = System.currentTimeMillis();
Log.d("DownloadManager", "download begining");
Log.d("DownloadManager", "download url:" + url);
Log.d("DownloadManager", "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(5000);
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.flush();
fos.close();
Log.d("DownloadManager", "download ready in" + ((System.currentTimeMillis() - startTime) / 1000) + " sec");

} catch (IOException e) {
Log.d("DownloadManager", "Error: " + e);
}

}

You need to add the following permissions to your AndroidManifest.xml:

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


Related Topics



Leave a reply



Submit