Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
1

Загрузка файла из сети интернет

06.02.2017, 12:50. Просмотров 477. Ответов 2
Метки нет (Все метки)

Добрый день.

Я, после большого перерыва, вернулся к своему проекту. Нашел примеры как скачивать файл из интернета. Вот как я это пытаюсь реализовать:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
public class DownloadTfile {
 
    public static void downloadFile(String url) {
        //final Context context = this.getApplicationContext();
        //final ProgressDialog progressDialog = new ProgressDialog(this);
 
        Log.d("Edgar", "url " + url);
 
        new AsyncTask<String, Integer, File>() {
            private Exception m_error = null;
 
            @Override
            protected void onPreExecute() {
                /*progressDialog.setMessage("Downloading ...");
                progressDialog.setCancelable(false);
                progressDialog.setMax(100);
                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                progressDialog.show();*/
            }
 
            @Override
            protected File doInBackground(String... params) {
                URL url;
                HttpURLConnection urlConnection;
                InputStream inputStream;
                int totalSize;
                int downloadedSize;
                byte[] buffer;
                int bufferLength;
 
                File file = null;
                FileOutputStream fos = null;
 
                try {
                    url = new URL(params[0]);
                    urlConnection = (HttpURLConnection) url.openConnection();
 
                    Log.d("Edgar", "urlConnection " + urlConnection);
 
                    urlConnection.setRequestMethod("GET");
                    urlConnection.setDoOutput(false);
                    urlConnection.connect();
                    file = File.createTempFile("Torrent", "torrent"/*, context.getCacheDir()*/);
                    fos = new FileOutputStream(file);
                    inputStream = urlConnection.getInputStream();
                    totalSize = urlConnection.getContentLength();
                    downloadedSize = 0;
                    buffer = new byte[1024];
                    bufferLength = 0;
 
                    Log.d("Edgar", "File " + file);
 
                    // читаем со входа и пишем в выход,
                    // с каждой итерацией публикуем прогресс
                    while ((bufferLength = inputStream.read(buffer)) > 0) {
                        fos.write(buffer, 0, bufferLength);
                        downloadedSize += bufferLength;
                        publishProgress(downloadedSize, totalSize);
 
                        Log.d("Edgar", "fos " + fos);
                        Log.d("Edgar", "downloadSize " + downloadedSize);
                    }
                    fos.close();
                    inputStream.close();
 
                    return file;
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    m_error = e;
                } catch (IOException e) {
                    e.printStackTrace();
                    m_error = e;
                }
                return null;
            }
 
            // обновляем progressDialog
            protected void onProgressUpdate(Integer... values) {
                //progressDialog.setProgress((int) ((values[0] / (float) values[1]) * 100));
            };
 
            @Override
            protected void onPostExecute(File file) {
                // отображаем сообщение, если возникла ошибка
                if (m_error != null) {
                    m_error.printStackTrace();
                    return;
                }
                // закрываем прогресс и удаляем временный файл
                //progressDialog.hide();
                file.delete();
            }
        }.execute(url);
    }
}
Запускается это дело при нажатии на запись, полученную при поиске:
Java
1
2
3
4
5
6
7
8
9
10
11
itemView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
 
                //DownloadTest.downloadFile(item.getLink());
                DownloadTfile.downloadFile(item.getLink());
 
                Log.d("Edgar", "Ссылка " + item.getLink());
 
            }
        });
В логе видно, что приходит ссылка, и даже (вроде бы) идет некая загрузка, но никакого файла нигде не появляется.

Log:
D/Edgar: url http://open-tor.org/download/531838
D/Edgar: Ссылка http://open-tor.org/download/531838
D/Edgar: urlConnection com.android.okhttp.internal.http.HttpURLConnectionImpl:http://open-tor.org/download/531838
D/Edgar: File /data/data/com.tomaslutas.testbutton/cache/Torrent-1306235813torrent
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 1024
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 2048
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 3072
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 4096
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 5120
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 6144
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 7168
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 8192
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 9216
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 10240
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 11264
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 12288
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 13312
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 14136
D/Edgar: fos java.io.FileOutputStream@425109f8
D/Edgar: downloadSize 14851

Подскажите пожалуйста, что все таки не правильно реализовано.
Заранее благодарю.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2017, 12:50
Ответы с готовыми решениями:

Загрузка Audio и Video в ListView из сети Интернет
Как загружать Audio и Video в ListView из сети Интернет, с последующим воспроизведением?

Загрузка файла из сети, и его выполнение
Здравсвуйте, пытаюсь загрузить файл из сети (это файл приложения *.apk), и после загрузки сразу его...

Возможен ли иск к изобретателям платформы сети Интернет и платформ сетевых соединений на базе сети Интернет?
В связи с мировым обнародованием фактов шпионажа через всемирную сеть Интернет, возможен ли...

Загрузка файла через интернет!
У кого есть исходник загрузки .exe файла через интернет???? с ProgressBar ??????????

Загрузка файла с интернет-сайта
Здраствуйте, я новечок в разработке и мне очень нужна помощь. Дали задание подать запрос к сайту (...

2
OlegJV
103 / 103 / 28
Регистрация: 13.03.2016
Сообщений: 474
06.02.2017, 15:31 2
А где по Вашему должен появиться файл? Разве указан какой-то путь для его сохранения?
Нужно что-то вроде этого:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static boolean writeExternal(InputStream is, String path) {
        if (!isExternalAvailable()) return false;
        File file = new File(Environment.getExternalStorageDirectory() + "/" + path);
        FileOutputStream writer = null;
        try {
            if (!file.exists()) {
                file.getParentFile().mkdirs();
                file.createNewFile();
            }
            writer = new FileOutputStream(file);
            writeFromInputToOutput(is, writer);
            return true;
        }
        catch (IOException e) {
            return false;
        }
        finally {
            try {
                writer.close();
                return true;
            }
            catch (IOException e) {
                return false;
            }
        }
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static int writeFromInputToOutput(InputStream is, OutputStream os) {
 
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead = EOF_MARK;
        int count = 0;
        try {
            while ((bytesRead = is.read(buffer)) != EOF_MARK) {
                os.write(buffer, 0, bytesRead);
                count += bytesRead;
            }
        }
        catch (IOException e) {
            return -1;
        }
        return count;
    }
Скопипастил как бы универсальные методы, можно все это сократить под свои нужды.
0
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
06.02.2017, 18:23  [ТС] 3
Спасибо большое, вечером сегодня обязательно попробую. Только не совсем понял куда это прилепить ))

Добавлено через 2 часа 35 минут
Разобрался. Еще раз большое спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2017, 18:23

Загрузка файла из сети с определенной позиции
Каким образом можно скачать файл из сети с нужного места? У меня есть код: HttpWebRequest...

Приянять Wi-Fi интернет и раздать Wi-Fi интернет, но уже с другим именем сети
Проблема вот в чем. Принимаю на ноут гостевой wifi интернет. Комп сечется по макадресу и через...

Интернет сервер, автоматическое распределение интернет трафика в сети
Здравствуйте, помогите пожалуйста, может кто-то поднимал такие &quot;интернет сервера&quot;. На чём (какой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru