Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Hank
63 / 54 / 4
Регистрация: 28.12.2011
Сообщений: 297
#1

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

09.10.2015, 23:42. Просмотров 307. Ответов 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 аналогичную тему, но там сообщество решение так не подсказало.
Может тут народ подскажет. Спасибо!
http://www.cyberforum.ru/android-dev/thread867499.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2015, 23:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Progressbar при передаче файла на сервер (Программирование Android):

Не передаются значения при их передаче в другое активити
Собственно, обработчик по клику в первом активти: Intent shopintent =...

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

Обновление ProgressBar-a во время загрузки SQLite DB при включении приложения
Добрый день. Моя БД обновляется довольно долго поэтому хотелось бы показать...

Как перехватить пакет (запрос) данных при текущей передаче данных?
Хочу сделать на подобии валидации - что бы доступ к сети был только на...

Расшифровать данные Wireshark. Ошибка при передаче файла на сервер
Доброго времени суток. Помогите расшифровать логи Wireshark. При передаче файла...

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

Шифрование данных при передаче на сервер
Есть задача передать данные на сервер. Получать и отправлять данные будет...

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

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

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


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

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

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