Для загрузки файла в папку загрузок с именем файла от сервера в Android, вам понадобится использовать некоторые классы и методы из платформы Android. Вот примерный алгоритм, который позволит вам реализовать это:
1. Убедитесь, что у вас есть необходимые разрешения в файле AndroidManifest.xml. Вам понадобится разрешение на доступ к Интернету и разрешение на запись на устройство.
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. Создайте класс, который будет отвечать за загрузку файла. Предлагаю назвать его DownloadManager.
public class DownloadManager { private static final int BUFFER_SIZE = 4096; public static void downloadFile(String url, String filePath) throws IOException { URL downloadUrl = new URL(url); HttpURLConnection connection = (HttpURLConnection) downloadUrl.openConnection(); connection.setRequestMethod("GET"); // Проверяем, что соединение успешно if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { // Получаем информацию о файле с сервера String fileName = ""; String disposition = connection.getHeaderField("Content-Disposition"); String contentType = connection.getContentType(); if (disposition != null) { // Проверяем, содержит ли заголовок Content-Disposition информацию о имени файла int index = disposition.indexOf("filename="); if (index > 0) { fileName = disposition.substring(index + 10, disposition.length() - 1); } } else { // Если заголовок Content-Disposition не содержит информацию о имени файла, // используем имя файла из URL fileName = url.substring(url.lastIndexOf("/") + 1, url.length()); } // Открываем потоки для чтения данных из сервера и записи данных в файл InputStream inputStream = connection.getInputStream(); FileOutputStream outputStream = new FileOutputStream(filePath + File.separator + fileName); // Создаем буфер для считывания данных из потока byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } // Закрываем потоки outputStream.close(); inputStream.close(); } else { throw new IOException("Server returned HTTP code " + connection.getResponseCode()); } connection.disconnect(); } }
3. Далее, можно использовать этот класс для загрузки файла. Например, создайте активность и добавьте следующий код в метод onCreate().
String downloadUrl = "https://example.com/file.zip"; String downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(); try { DownloadManager.downloadFile(downloadUrl, downloadsDir); Toast.makeText(this, "Файл успешно загружен", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "Ошибка загрузки файла: " + e.getMessage(), Toast.LENGTH_SHORT).show(); }
В этом примере, мы указываем URL-адрес файла для загрузки и папку загрузок с помощью метода Environment.getExternalStoragePublicDirectory(). Затем мы вызываем метод downloadFile(), который загружает файл и сохраняет его в указанную папку загрузок.
Обратите внимание, что этот код выполняет операцию загрузки в главном потоке, что может вызвать блокировку пользовательского интерфейса. Чтобы избежать этого, вы можете использовать класс AsyncTask или другой механизм асинхронного выполнения для выполнения загрузки файла в фоновом режиме.