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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Hank
51 / 42 / 3
Регистрация: 28.12.2011
Сообщений: 239
#1

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

09.10.2015, 23:42. Просмотров 263. Ответов 6
Метки нет (Все метки)

Добрый день!

Имею код для отправки файла на сервер
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 при передаче файла на сервер (Программирование Android):

Ошибка при передаче Parcel - Программирование Android
Здраствуйте, пытаюсь через Parcel передать в другую активити обект и получаю ошибку 15:50:46.176 2349 currency.online ERROR...

Не передаются значения при их передаче в другое активити - Программирование Android
Собственно, обработчик по клику в первом активти: Intent shopintent = new Intent(MainActivity.this, Shop.class); ...

При передаче текста в другую программу нужен только Bluetooth - Программирование Android
При открытии списка программ в которые может быть отправлен текст из моей программы , есть и Bluetooth. Можно ли сделать так чтобы он был...

Как перехватить пакет (запрос) данных при текущей передаче данных? - Программирование Android
Хочу сделать на подобии валидации - что бы доступ к сети был только на определённые сайты. Я предполагаю так, перехватить текущий пакет...

Расшифровать данные Wireshark. Ошибка при передаче файла на сервер - Сети
Доброго времени суток. Помогите расшифровать логи Wireshark. При передаче файла ~9кб, все строки в логе Wireshark зеленные, как я понимаю...

Клиент-сервер: При передаче одного кадра все хорошо, но при отсылке потоком возникает ряд ошибок - C++
Добрый день, коллеги. Пишу клиент-серверное приложение для передачи потокового видео. Сервер на linux, клиент на win. Данные с камеры...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
10.10.2015, 18:41 #2
Hank, здравствуйте!
Что-то вы путаете. В первой части запроса вы передаёте методом POST файл. Во второй части запроса вы открываете входной поток и читаете ответ от сервера. Естественно, это занимает некоторое время.
Hank
51 / 42 / 3
Регистрация: 28.12.2011
Сообщений: 239
10.10.2015, 23:48  [ТС] #3
CoolMind,
В первой части запроса вы передаёте методом POST файл....
Я понимаю что выполняет мой код.
Естественно, что на получение ответа требуется время, но не так много, как на передачу файла. Возможно передача написана неправильно, а то файл в 3 МБайта передается очень быстро - цикл пробегает за считанные секунды, а на получении ответа останавливается на гораздо большее время. Еще смущает то, что при удалении строк с получением ответа перестает работать передача файла. Бред...
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
11.10.2015, 11:15 #4
http://stackoverflow.com/questions/1...tes-too-slowly
Hank
51 / 42 / 3
Регистрация: 28.12.2011
Сообщений: 239
12.10.2015, 12:02  [ТС] #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
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 731
12.10.2015, 12:31 #6
делай Progressbar на получение ответа, все будет по честному
Hank
51 / 42 / 3
Регистрация: 28.12.2011
Сообщений: 239
12.10.2015, 12:41  [ТС] #7
Цитата Сообщение от Valakin Посмотреть сообщение
делай Progressbar на получение ответа, все будет по честному
Да, мысль здравая, думал так сделать, но не понял как вычислять шаг обновления прогресса - тут ведь циклов никаких нет.
Была идея - перед получением ответа прогресс останавливается, скажем на 99%, а уже после получения обновляется до 100%. Но как-то сомнительно это, до 99% все работало шустро, а на последнем проценте все остановилось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 12:41
Привет! Вот еще темы с ответами:

Как шифровать данные при передаче на сервер? - PHP
Немного запутался в шифровании,подскажите как будет правильнее шифровать 1)Есть клиент на андроиде который посылает по сети не...

Сетевой чат: при передаче сообщения сервер зацикливается - C#
Здравствуйте,господа. возникла проблема в написании чата. при передачи сообщения сервер зацикливается,при это выводит одно сообщение...

При первой передаче данных на сервер отправляются нулевые данные - jQuery
Не могу никак реализовать конечный результат, когда нужно получить все данные после редактированного изображение. Сразу скажу что этот...

Реализация сервер - клиенты через Сокеты. Размер буфера при передаче списков - C#
Доброго времени суток. Пишу приложение по ведению заказов. Столкнулся с проблемой. Есть сервер и множество клиентов. На сервере...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.10.2015, 12:41
Ответ Создать тему
Опции темы

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