Форум программистов, компьютерный форум CyberForum.ru

Progressbar при передаче файла на сервер - Android

Восстановить пароль Регистрация
 
Hank
42 / 33 / 2
Регистрация: 28.12.2011
Сообщений: 210
09.10.2015, 23:42     Progressbar при передаче файла на сервер #1
Добрый день!

Имею код для отправки файла на сервер
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
public String sendPhoto(File file){
        String total = "";
        String fileName = file.getName();
 
        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable;
        byte[] buffer;
        int maxBufferSize = 1024;
 
        // open a URL connection to the Servlet
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
 
            String urlSendPhoto = "my url";
            URL url = new URL(urlSendPhoto);
 
        // Open a HTTP  connection to  the URL
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true); // Allow Inputs
            conn.setDoOutput(true); // Allow Outputs
            conn.setUseCaches(false); // Don't use a Cached Copy
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("ENCTYPE", "multipart/form-data");
            conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
            conn.setRequestProperty("nameFile", fileName);
 
            dos = new DataOutputStream(conn.getOutputStream());
 
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name="nameFile";filename=""
                    + fileName + """ + lineEnd);
            dos.writeBytes(lineEnd);
 
            // create a buffer of  maximum size
            bytesAvailable = fileInputStream.available();
            buffer = new byte[maxBufferSize];
            int startProcess = bytesAvailable;
            int progress = 0;
            while ((bytesRead = fileInputStream.read(buffer)) > 0) {
                dos.write(buffer, 0, bytesRead);
                progress += bytesRead;
               //тут производится обновление прогрессбара
            }
 
            // send multipart form data necesssary after file data...
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
 
            // Responses from the server (code and message)
            fileInputStream.close();
            dos.flush();
            dos.close();
            InputStream inputStream = conn.getInputStream();
            InputStreamReader input = new InputStreamReader(inputStream);
            BufferedReader reader = new BufferedReader(input);
            int code = conn.getResponseCode();
            String line;
            while ((line = reader.readLine()) != null){
                total += line;
            }
            Log.i("uploadFile", "HTTP Response is : " + total);
 
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return total;
с обновлением прогресса проблем нет, проблема в том, что выполнение программы тормозится на строке
Java
1
 InputStream inputStream = conn.getInputStream();
Поэтому получается ерунда - прогресс дошел до 100%, но программа все равно задумывается.
Если убираю эту строку, то файл на сервер не передается.
Читал на stackoverflow аналогичную тему, но там сообщество решение так не подсказало.
Может тут народ подскажет. Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2015, 23:42     Progressbar при передаче файла на сервер
Посмотрите здесь:

progressbar Android
Android ProgressBar
Android TextView in ProgressBar
Ошибка при передаче Parcel Android
Функция для загрузки файла на сервер Android
Android ProgressBar
Запустить progressbar Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
10.10.2015, 18:41     Progressbar при передаче файла на сервер #2
Hank, здравствуйте!
Что-то вы путаете. В первой части запроса вы передаёте методом POST файл. Во второй части запроса вы открываете входной поток и читаете ответ от сервера. Естественно, это занимает некоторое время.
Hank
42 / 33 / 2
Регистрация: 28.12.2011
Сообщений: 210
10.10.2015, 23:48  [ТС]     Progressbar при передаче файла на сервер #3
CoolMind,
В первой части запроса вы передаёте методом POST файл....
Я понимаю что выполняет мой код.
Естественно, что на получение ответа требуется время, но не так много, как на передачу файла. Возможно передача написана неправильно, а то файл в 3 МБайта передается очень быстро - цикл пробегает за считанные секунды, а на получении ответа останавливается на гораздо большее время. Еще смущает то, что при удалении строк с получением ответа перестает работать передача файла. Бред...
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
11.10.2015, 11:15     Progressbar при передаче файла на сервер #4
http://stackoverflow.com/questions/1...tes-too-slowly
Hank
42 / 33 / 2
Регистрация: 28.12.2011
Сообщений: 210
12.10.2015, 12:02  [ТС]     Progressbar при передаче файла на сервер #5
В общем не помогает.
Попробовал указать
Java
1
conn.setRequestProperty("Connection", "close");
Java
1
System.setProperty("http.keepAlive", "false");
при указании
Java
1
conn.setRequestProperty("Content-Length", "1000");
вообще падает exceeded content-length limit of 75 bytes видимо неправильно размер указываю.
Valakin
 Аватар для Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 715
12.10.2015, 12:31     Progressbar при передаче файла на сервер #6
делай Progressbar на получение ответа, все будет по честному
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 12:41     Progressbar при передаче файла на сервер
Еще ссылки по теме:

Не передаются значения при их передаче в другое активити Android
Цвет ProgressBar Android
Как перехватить пакет (запрос) данных при текущей передаче данных? Android
Android "Ошибка при синтаксическом анализе пакета" при скачивании файла
При передаче текста в другую программу нужен только Bluetooth Android

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

Или воспользуйтесь поиском по форуму:
Hank
42 / 33 / 2
Регистрация: 28.12.2011
Сообщений: 210
12.10.2015, 12:41  [ТС]     Progressbar при передаче файла на сервер #7
Цитата Сообщение от Valakin Посмотреть сообщение
делай Progressbar на получение ответа, все будет по честному
Да, мысль здравая, думал так сделать, но не понял как вычислять шаг обновления прогресса - тут ведь циклов никаких нет.
Была идея - перед получением ответа прогресс останавливается, скажем на 99%, а уже после получения обновляется до 100%. Но как-то сомнительно это, до 99% все работало шустро, а на последнем проценте все остановилось.
Yandex
Объявления
12.10.2015, 12:41     Progressbar при передаче файла на сервер
Ответ Создать тему
Опции темы

Текущее время: 19:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru