powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Битые картинки при аплоаде файлов по http из Android
49 сообщений из 49, показаны все 2 страниц
Битые картинки при аплоаде файлов по http из Android
    #37102394
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имеем девайс с android 2.2
аплоадим на сервер картинки используя следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
HttpPostMultipartClient httpClient =  new  HttpPostMultipartClient(EXPORT_PHOTOS_URI);
httpClient.addParam("username", credentials.getUsername());
httpClient.addParam("password", credentials.getPassword());
httpClient.addParam("locations_id", Integer.toString(entity .getLocation()));
				
httpClient.addFile("image", AndorraApplication.getPhotosPath() + "/" + entity.getFileName());

 try  {
	String responseStr = httpClient.execute();
	 try  {
		 final  JSONObject resultObj =  new  JSONObject(responseStr);
		 if  (resultObj.getBoolean("result")) {
			// mark these itms as exported
			photoReader.markAsExported(entity.getId());
		}
	}  catch  (JSONException e) {
		Log.e(TAG, "JSON Exception: " + e.getMessage(), e);
	}
}  catch  (IOException e) {
	Log.e(TAG,
			"exportData: sending photo failed: "
					+ e.getMessage(), e);
}


класс аплоада тут:

Код: plaintext
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.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
 public   class  HttpPostMultipartClient {
........
 public  String execute()  throws  IOException {
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****MultipartBoundary";

     try  {
        URL url =  new  URL(mUri);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("Content-Type",
                "multipart/form-data; boundary=" + boundary);

        // timeouts
        conn.setConnectTimeout(CONNECT_TIMEOUT);
        conn.setReadTimeout(READ_TIMEOUT);

        Log.d(TAG, "Opening connectionStream");
        DataOutputStream dos =  new  DataOutputStream(conn.getOutputStream());

        Log.d(TAG, "Adding params");
         for  (NameValuePair param : mParams) {
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: post-data; name="
                    + param.getName() + lineEnd);
            dos.writeBytes(lineEnd);
            dos.writeBytes(param.getValue());
            dos.writeBytes(lineEnd);
        }

        File file;
        Log.d(TAG, "Adding files");
         for  (NameValuePair param : mFiles) {
            file =  new  File(param.getValue());
             if  (file.exists()) {
                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: post-data; name="
                        + param.getName() + "; filename=" + file.getName()
                        + lineEnd);
                dos.writeBytes("Content-Type: application/octet-stream" + lineEnd);
                dos.writeBytes("Content-Transfer-Encoding: binary" + lineEnd);
                dos.writeBytes(lineEnd);

                Log.d(TAG, "Opening fileInputStream");
                FileInputStream fileStream =  new  FileInputStream(file);
                 try  {
                     int  bytesAvailable;

                     while ((bytesAvailable = fileStream.available()) >  0 )
                    {
                         int  bufferSize = Math.min(bytesAvailable,  4096 );
                         byte [] buffer =  new   byte [bufferSize];
                         int  bytesRead = fileStream.read(buffer,  0 , bufferSize);
                        dos.write(buffer,  0 , bytesRead);
                    }
                    dos.writeBytes(lineEnd);
                }  finally  {
                    fileStream.close();
                }
                Log.d(TAG, "Closing fileINputStream");
            }
        }

        // very important - we specify the end of the multipart block
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

        dos.flush();
        dos.close();

        // getting response
         if  (conn.getResponseCode() == HttpStatus.SC_OK) {
            BufferedInputStream bis =  new  BufferedInputStream(conn.getInputStream());
             try  {
                 ByteArrayBuffer baf =  new  ByteArrayBuffer( 50 );
                  int  read =  0 ;
                  int  bufSize =  512 ;
                  byte [] buffer =  new   byte [bufSize];
                  while (true){
                      read = bis.read(buffer);
                       if (read==- 1 ){
                            break ;
                      }
                      baf.append(buffer,  0 , read);
                 }
                 Log.d(TAG, "Connection successful - returning result");
                  return   new  String(baf.toByteArray(), "UTF-8");
            }  finally  {
                bis.close();
            }
        }  else  {
            Log.d(TAG, "Return code is " + Integer.toString(conn.getResponseCode()));
             throw   new  IOException("Return code is " + Integer.toString(conn.getResponseCode()));
        }

    }  catch  (MalformedURLException e) {
        Log.e(TAG, "Exception: " + e.getMessage(), e);
         throw   new  IOException("aaa");
    }  catch  (IOException e) {
        Log.e(TAG, "Exception: " + e.getMessage(), e);
         throw   new  IOException();
    }
}
}

в результате в большинстве случаев получаем на выходе битую картинку
пример:
картинка в оригинале - взята с sdcard
то, что приходит на сервер

на сервере тривиальнейший скрипт: <?php move_uploaded_file(blablabla ?>

размер обоих файлов одинаковый. при сравнении оказывается, что какие-то блоки (в данном случае один, но у клиентов вообще вся картинка в хлам) бьются. причем блоки разной длины бывают
------------------------------------------------------------------------

00051330 | 49 69 11 4B 9D E6 | 00051330 | DA BB 10 70 DC 77 |
00051338 | 2D B9 1B B9 E4 81 5A E6 | 00051338 | AC 20 C7 90 7E B4 33 80 |
00051340 | D4 14 B0 F4 EA 3D D1 E9 | 00051340 | 31 9A B8 C2 29 83 66 9C |
00051348 | 61 9D E3 38 F7 36 DE 63 | 00051348 | 9A 84 8E 73 9A 8D B5 29 |
00051350 | 25 9D 9D C4 64 C3 23 AA | 00051350 | 18 60 1C 0F 7A CF 33 01 |
00051358 | 4A EB 08 C3 97 7C 8C 36 | 00051358 | D4 F0 7A D3 24 BA 85 71 |
00051360 | 73 F5 E3 15 14 5B BC C1 | 00051360 | F3 0A 76 8A D6 C4 36 5E |
00051368 | B9 A4 49 06 71 1B 11 87 | 00051368 | 7B B9 5F 20 E3 A5 46 F2 |
00051370 | 39 E7 76 7B 8F 5F | 00051370 | B8 1D 4E 6B 36 6D |
------------------------------------------------------------------------

причем картинка может и нормально дойти, а может и побиться по дороге


пробовал делать аплоад через apache httpmime 4.1 - результат тот же.
пробовал сменить сервер - 0 эмоций. то же самое

да. вся эта процедура вызывается из отдельного треда. но в 1 момент времени только 1 тред работает. по логкату смотрел - все путем.

в чем может быть проблема? сидел, размышлял. может быть проблема где-то в stream'ах и я что-то не то делаю?
в http ведь нет коррекции ошибок, за все отвечает tcp и он просто не пропустит битый блок данных...

спасибо заранее за ответы. надеюсь подскажете как решить проблему, а то бьюсь третий день уже. только караул еще не кричу... =)
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102732
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решил проверить, может FileInputStream глючит как-то
изменил немного код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
			FileOutputStream fileOutStream =  new  FileOutputStream(AndorraApplication.getPhotosPath() + "/orig_" +file.getName() );
			DataOutputStream dataOutStream =  new  DataOutputStream(fileOutStream);
					

			 try  {
		                 int  bytesAvailable;

		                 while ((bytesAvailable = fileStream.available()) >  0 )
		                {
		                     int  bufferSize = Math.min(bytesAvailable,  4096 );
		                     byte [] buffer =  new   byte [bufferSize];
		                     int  bytesRead = fileStream.read(buffer,  0 , bufferSize);
		                    dos.write(buffer,  0 , bytesRead);
		                    dataOutStream.write(buffer,  0 , bytesRead);
		                }
				dos.writeBytes(lineEnd);
			}  finally  {
				fileStream.close();
				dataOutStream.close();
			}

в результате, когда картинка на сервере аплоадится битая, файл сохраняется на sd идеально..
это какой-то баг в HttpURLConnection или у меня совсем кривые руки? =)

люди, SOS, ПОМОГИТЕ! =)
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102771
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методы работы с IO у вас в стиле "доку не читал, догадался по названиям методов"
перепишите чтение и запись более традиционным способом. Посмотрите примеры
http://www.exampledepot.com/egs/java.io/CopyFile.html
http://www.exampledepot.com/egs/java.io/File2ByteArray.html
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102817
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

пусть так, но сути это не меняет.
размер на сервере - идентичный. но данные внутри покоцаные в той или иной степени.
если вы мне подскажете каким образом порча данных при передаче по http может быть вызвана "не совсем корректным с точки зрения guru" написанием кода - буду очень благодарен

на предмет "перепишите все" - бесполезно. в оригинале использовалась апачевская httpclient
и конструкция была предельно простая:
reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("image", new FileBody(new File(...)), "image/jpeg"));
и далее через defaulthttpclient

результат был тот же. что-то мне подсказывает, что в апачевской либе работа с IO организована правильно...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102869
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cесли вы мне подскажете каким образом порча данных при передаче по http может быть вызвана "не совсем корректным с точки зрения guru" написанием кода - буду очень благодарен

Опыт подсказывает что все проблемы с порчей данных вызваны неаккуратностью работы с IO.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102882
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cна предмет "перепишите все" - бесполезно. в оригинале использовалась апачевская httpclient
результат был тот же. что-то мне подсказывает, что в апачевской либе работа с IO организована правильно...
Зачем вы тогда код приводите?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102883
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

ну вот смотрите
в оригинале это было примерно так:
Код: plaintext
1.
2.
3.
4.
MultipartEntity reqEntity =  new  MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

reqEntity.addPart("image",  new  FileBody( new  File(AndorraApplication.getPhotosPath() + "/" + entity.getFileName()), "image/jpeg"));
resp = NetworkUtils.sendHttpRequestMultipart(EXPORT_PHOTOS_URI, reqEntity);

и класс собсно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 public   class  NetworkUtils {
     public   static   final   int  REGISTRATION_TIMEOUT =  3  *  1000 ; 
     public   static   final   int  WAIT_TIMEOUT =  5  *  1000 ;

     public   static  HttpResponse sendHttpRequestMultipart(String uri, MultipartEntity entity) {
        HttpClient mHttpClient =  new  DefaultHttpClient();
         final  HttpParams params = mHttpClient.getParams();
        HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
        ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);

        HttpPost post =  new  HttpPost(uri);
        post.addHeader(entity.getContentType());
        post.setEntity(entity);
        HttpResponse resp = mHttpClient.execute(post);
         return  resp;
    }
}

а вот потом уже начались танцы с бубнами и пробование всего, чего угодно.
тут все достаточно гладко, на мой дилетантский взгляд...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102902
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЗачем вы тогда код приводите?
вначале думал, что проблема в библиотеке.... а тут более развернутый алгоритм - больше поле для "фантазий" =)

вообще, мне начинает казаться, что проблема кроется в froyo, т.е. у некоторых программ возникали проблемы подобного рода.. к сожалению, никаких workaround кроме как передавать checksum и в случае несоответствия отправлять заново, я не нашел. но в данном случае это не вариант, потому что на конечных устройствах битыми приходят 95% изображений :( т.е. это бесполезная трата трафика :(

хотя вариант с кривыми руками имеет право на существование. они действительно пока не очень прямые, к сожалению...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102919
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37102953
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что если попробовать
entity.setChunked(true);
для аплоада мелкими порциями?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103473
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz http://blog.pixelpipe.com/2010/10/22/having-corruption-issues-with-your-android-2-2-media-uploads/
да. про это я читал. но никаких решений проблемы в нете, к сожалению, не нашел. возможно плохо искал.
но что-то мне подсказывает, что здесь не совсем мой случай. потому что
1) картинки берутся просто как файл с файловой системы без участия mediastore
2) размер файла-то как раз нормальный. а вот внутри - ужас :(

видел посты про просто бьющиеся картинки, но там как решение - тупо проверять чексум файла. но тут не вариант - почти все картинки битые, так что будет отправлять до бесконечности, пока трафик не кончится :(
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103499
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЧто если попробовать
entity.setChunked(true);
для аплоада мелкими порциями?
спасибо за идею. хоть что-то.. пойду документацию читать и пробовать.

кстати, забыл сказать, что с указанным куском кода тоже была проблема, решить которую у меня ну вообще не получилось :(

в связи с тем, что качество связи там, где эта программа должна использоваться, отвратительное, проводил тест:
начинается аплоад картинки, в это время отключаем 3g. и висим =) таймаут срабатывает через 17-20 минут. хотя все таймауты минимальные.
причем, если, например, связи нет изначально ДО того, как началась отправка, то таймаут срабатывает очень четко. т.е. даже 3g поднят, но связь плохая, 3 секунды - и sockettimeoutexception срабатывает.

как только не пробовал... и как в коде у меня приведено. и наоборот, сначала создавая параметры и передавая их в конструктор httpclient'а.. и connectionmanager пробовал создавать и ему уже указывать... как об стенку горох )
не везет мне как-то с аплоадом этим )
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103502
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cвидел посты про просто бьющиеся картинки, но там как решение - тупо проверять чексум файла. но тут не вариант - почти все картинки битые, так что будет отправлять до бесконечности, пока трафик не кончится :(
Существуют восстанавливающие алгоритмы. Но тут, судя по тому что целые куски в хлам, они могут не помочь.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103692
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczСуществуют восстанавливающие алгоритмы. Но тут, судя по тому что целые куски в хлам, они могут не помочь.
да. скорее всего это не вариант. я вверху привел результат compare двух файлов... причем, это самый хороший вариант. на клиентских девайсах картинки вообще не видно. одни полоски. =)

кстати, к сожалению, не нашел ничего связанного с setchunked у multipartentity

вот думаю, может быть вместо content-transfer-encoding: binary попробовать через base64 кодировать. потму что текст-то врде нормально доходит....
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103762
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема только на железках возникает или на эмуляторе тоже?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103825
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема никак не связана с конкурентным доступом? Т.е. ошибка проявляется даже если никто другой ничего на сервер не аплоадит?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103897
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот на эмуляторе не пробовал, если честно... картинки с камеры берутся, записываются в файл и по мере надобности отправляются, а т.к. камеры на эмуляторе нет, то тестить там сложно. однако попробую как-то в эмулятор большую картинку запихнуть
на железках = да проявляются. я на hd2 тестирую, клиентские - galaxy tab... т.е. железо, подозреваю, ни при чем.

попробовал в base64.. был просто в шоке =)
в общем передалал код вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
		 try  {
				Base64OutputStream b64OutStream =  new  Base64OutputStream(dos, Base64.CRLF | Base64.NO_CLOSE);

				 int  bytesAvailable;

		                 while ((bytesAvailable = fileStream.available()) >  0 )
		                {
		                     int  bufferSize = Math.min(bytesAvailable,  4096 );
		                     byte [] buffer =  new   byte [bufferSize];
		                     int  bytesRead = fileStream.read(buffer,  0 , bufferSize);
		                    b64OutStream.write(buffer,  0 , bytesRead);
		                }
				b64OutStream.close();
		                dos.writeBytes(lineEnd);
			}  finally  {
				fileStream.close();
			}

правда я не уверен, можно ли так делать.. в середине работы с потоком оборачивать его в другой поток, а потом снова с исходным работать, но флаг NO_CLOSE стоит. dos не закрывается значит...

в результате теста 1 из 5 аплоадов одной и той же картинки был неправильный. причем так забавно.. идет блок base64 (я raw post data сохраняю) и поседине вот такой корявый кусок выскакивает.
=================
g9jmI8frThqfw+bga5/wIxnB+nNfBM3xX1+DazyRR+ZwQzfyp7/FvXIcLKFBJAQ7+GrZ5TLu/wAD
ofsex95vqXw+UZPiFEHq0ZxR/aPgEYI8QxsR2EbcV8GD4ua2kywmFBIefLZxk++KcfjHrQk8maKO
ObGQvmDcw/Kl/ZE+7/AP3N9UfeX9o+AWIH/CQJuP8JRs1I934GiA3+J4GQcHrX9W2VtD8h1WpdtrxZRg49xU6tG2MtxgHrxWVFnzGAPzHGPp
U3AkAZsBvvClKs6mV+zi5Sk7L0E/YRi5M+s/tvgVeT4k
iwePuNT1uPBjZI8QQ4HqjD+lfHHxZ1XxN8H/ABlP4ans9+msu/TrtjzKoGSDnqRXMT/GDVICx8rK
p/EzYU/WlHKnNKUZOz9CYqhKKlY+7xfeBmAP/CRREHuEanrceCWyV8RQtjqAjZH6V8Dw/G+9uiy2
9sjSAFgd3f8Awr6E+AnhHwb8cLCeS9ku4NWitftAktiPLUehB71jVy72MHUnJpfImbw8Ue6GfwcM
=========================

ну и файл как раз отличается на эти несколько десятков байт.

ну,думаю, может действительно дурак... дай переделаю работу с потоками так, как вы в самом начале говорили. (на самом деле код который выше - я просто скопировал с stackoverflow, т.к. утверждалось, что он заведомо рабочий, а разбираться в нюансах времени просто не было - шла череда экспериментов)

получилось вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 try  {
	Base64OutputStream b64OutStream =  new  Base64OutputStream(dos, Base64.CRLF | Base64.NO_CLOSE);

	 byte [] buf =  new   byte [ 1024 ];
	 int  len;
	 while  ((len = fileStream.read(buf)) >  0 ) {
		b64OutStream.write(buf,  0 , len);
	}
	b64OutStream.close();
	dos.writeBytes(lineEnd);
}  finally  {
	fileStream.close();
}

первые 3 аплоада были удачными.. но каково же было мое удивление, когда я в 2х следующих посередине base64 данных обнаружил следующее:
========
UX5W5yTSlMH5jk9qVTxwO+D+FS9BpJDMDABB4PIp6IhBy2c0nysBk5OTyKQbUcdwf1q7alpa6j0C
ouRycdRTCmD3p7KGX274pBKyMVBOAPxqWvvHtoMторым был раньше. Оно тебе
надо?<br>
Если тебя всё устраивает - л3jHjv60bsyeu4Ruozg/N1wKRjkkZzjmnKpQ7m7cULsJPXnn
Aot5Fq17CeVyu0445zTtrEjnjvg03aX6HAz27Uske0fN17dqpRutRu3QkjIySoGV9aZyrE544yaI
8EA9M5zTthPHUkcUuVERa6jI13N0wvvT3wxIJxkY+tIgk25ONw6U4oeuSQOtGrdwd0IIVUdQfWkY
==========

а в другом файле вот это:
=========
UEdxCwJ5GO5poGAMHnPenmN92QQVxwKaAVXc3JHFKzZSeou4EkZPFOYGNWBGT2PtTVChQ3XNIhY5
570rdHsK3cVGIHsRzR06U7Yec8ECm4LEFjwO3pQ9GAqnnJHTr71KMkKQOD1pNy/MOoahSQvXjp9a
tpDWo1kLsx7DFPEKMpZeKcUour sex partners.
* Stop premature ejaculations.

http://longpeni28Y4xxUgUKCPXrUbjef93mrcdLtGa+IkYOWwTwRmlALfw8Dg+1NjG7kmpIsKCDw
M5xUW5Qeuwm3jGMc0gwBkD606MYPqM5px24PHGaXN0K5WxoOAR60SIGHrmkMeGGOcetOYFecYx1q
=========

при этом на этом телефоне вообще ничего кроме этого приложения не запускалось

может у меня на компутере вирус какой-то, который внедряет свой код в java файлы при компиляции? =)
я вообще теперь не знаю чего думать )
полный дурдом в общем )

что касается доступа к серверу. на выходе стоит тупейший php скрипт, который сохраняет картинку на диск под уникальным именем. а в данный момент я вообще просто сохраняю данные POST в текстовый файл
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37103983
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смените сервер. Бывают такие вирусы, которые инжектят спам в http трафик.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104000
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ээээ. вирус на centos у крупной хостинговой компании?
я, кстати, пробовал менять сервер на другой (уже другая хостинговая компания). результат был тот же. я писал, по-моему, об этом в самом начале. на этом же сервере хостятся куча других наших сайтов и с аплоадом картинок из браузера, через flash, да и просто передача данных с форм, проходит на ура.. проблема именно в стыковке андроид приложения и сервера :(
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104059
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем судя по всему ,проблему на форуме решить не представляется возможным, т.к. все, кого ни спрашиваю, в шоке от такой ерунды. )
буду, наверное, аплоад отдельно от программы тестировать. напишу прогу, которая отправляет 1 и ту же картинку постоянно..
и если заработает, значит вирус - это я. и где-то намудрил. хотя как так можно намудрить - не понимаю )

спасибо, что потратили на меня свое время )
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104188
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем резюмируя
для чистоты эксперимента сделал следующую прогу. привожу весь текст
Код: plaintext
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.
 package  com.android.uploadtest;

 import  java.io.File;

 import  org.apache.http.HttpResponse;
 import  org.apache.http.entity.mime.HttpMultipartMode;
 import  org.apache.http.entity.mime.MultipartEntity;
 import  org.apache.http.entity.mime.content.FileBody;

 import  android.app.Activity;
 import  android.app.AlertDialog;
 import  android.content.DialogInterface;
 import  android.os.Bundle;
 import  android.os.Environment;
 import  android.view.View;

 public   class  UploadTest  extends  Activity {
	 private   final   static  String TAG = "UploadTest";

	/** Called when the activity is first created. */
	@Override
	 public   void  onCreate(Bundle savedInstanceState) {
		 super .onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	 private   void  uploadImage() {
		String imagePath = Environment.getExternalStorageDirectory()
				+ "/Andorra/Images/748.jpg";
		String exportUrl = "http://доментута/pda/export_photos.php";

		String responseStr = "";
//		HttpPostMultipartClient httpClient = new HttpPostMultipartClient(
//				exportUrl);
//
//		httpClient.addFile("image", imagePath);
//
//		try {
//			responseStr = httpClient.execute();
//		} catch (Exception e) {
//			Log.e(TAG, e.getMessage(), e);
//		}

		MultipartEntity reqEntity =  new  MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

		reqEntity.addPart("image",  new  FileBody( new  File(imagePath), "image/jpeg"));
		HttpResponse resp = NetworkUtils.sendHttpRequestMultipart(exportUrl, reqEntity);

		 new  AlertDialog.Builder( this ).setMessage(responseStr)
				.setTitle("Finished")
				.setPositiveButton("Ok",  new  DialogInterface.OnClickListener() {
					 public   void  onClick(DialogInterface dialog,  int  whichButton) {
					}
				}).show();

	}
	
	 public   void  btn1_onClickHandler(View v) {
		uploadImage();
	}
}

тут уж вообще негде мудрить, т.к. это весь листинг программы.

причем пробовал и с httpcomponents и напрямую работая с httpconnection (строчки закомменченные)

поменял сервер на вообще другой..


итог. с httpconnection - из 10 аплоадов 2 битых
httpcomponents - из 13 аплоадов 4 битых

я сдаюсь )
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104209
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл сказал. используемое соединение - 3g от мегафона. через wifi нет возможности попробовать, к сожалению...
сейчас буду пытаться файл загрузить на эмулятор и тестировать на эмуляторе под разными версиями android'а
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104215
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если посылать файлы размером в 1-2Кб, то они тоже могут портиться?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104246
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex couRycdRTCmD3p7KGX274pBKyMVBOAPxqWvvHtoMторым был раньше. Оно тебе
надо?<br>

Гугл подсказывает что кто-то в это время читал
"10 причин не идти на Дэвида Айка"
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104300
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня аналогичная проблема возникла, но только из iPhone. Пока её также не решил, если найду решение - отпишусь в этой теме.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104401
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
=)
я сейчас тестирую из эмулятора... в процессе
мелкие файлы не пробовал. но параллельно теми же методами отправляются обычные пост запросы размером до нескольких килобайт. там все путем.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104423
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczalex couRycdRTCmD3p7KGX274pBKyMVBOAPxqWvvHtoMторым был раньше. Оно тебе
надо?<br>

Гугл подсказывает что кто-то в это время читал
"10 причин не идти на Дэвида Айка"
вопрос в том - кто... =) точно не я ) неужто мегафоновский 3g такой херней может страдать?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104435
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот сейчас зааплоадил 16 картинок по 4 мега кажжая через эмулятор...
заняло порядочно времени. заливал, правда, через нормельную сеть.
все 16 картинок идеальные... вечером еще через wifi с устройства попробую...
глюк в конкретной сборке андроида? отстутсвие нормальной коррекции tcp ?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104436
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cвопрос в том - кто... =) точно не я ) неужто мегафоновский 3g такой херней может страдать?
А как же остальные клиенты?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104440
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cотстутсвие нормальной коррекции tcp ?
TCP здесь, скорее всего, не при чем. Где-то буфер общий используется и не разделяется между сессиями.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104446
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczTCP здесь, скорее всего, не при чем. Где-то буфер общий используется и не разделяется между сессиями.

но вся прелесть ситуации в том, что
1) на моем устройстве кроме как эта прога вообще боьлше ничего не запускается. я хром открывал 1 раз только неделю назад. просто посмотреть как оно на андроиде выглядит.
2) конечные клиенты в данный момент аплоадят картинки из андорры через какое-то тормозное wifi соединение.. так что мегафон тут точно ни при чем...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104519
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все же как на счет chunked?
http://code.google.com/p/android/issues/detail?id=3164
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104520
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а картинки бьются, шо пипец: http://pixelbirthcloud.com/574_orig.jpg - тут не один блок из 70 байт. тут пол картинки убито :(
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104532
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczИ все же как на счет chunked?
http://code.google.com/p/android/issues/detail?id=3164
т.е. просто установить
conn.setChunkedStreamingMode(размербуфера);
и посмотреть что будет?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104775
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczГугл подсказывает что кто-то в это время читал
"10 причин не идти на Дэвида Айка"
Всётаки это скорее почтовый спам а не HTTP трафик.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104787
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczИ все же как на счет chunked?
http://code.google.com/p/android/issues/detail?id=3164
в общем сделал я так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
			URL url =  new  URL(mUri);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();

			conn.setDoInput(true);
			conn.setDoOutput(true);
			conn.setUseCaches(false);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Connection", "Keep-Alive");
			conn.setRequestProperty("Content-Type",
					"multipart/form-data; boundary=" + boundary);
			conn.setChunkedStreamingMode( 8192 );
результат тот же. картинки бьются при аплоаде. :(
уточнил у клиентов - на том конце wifi роутер стоит. т.е. это не 3g.
попробовать что ли ftp аплоад... может он заработает?
как вы считаете, есть еще какие-то варианты?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104817
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cкак вы считаете, есть еще какие-то варианты?
Подключиться через WiFi и мониторить трафик. Посмотреть что именно едет с девайса и в каком виде приезжает на сервер.
Действительно похоже на какую-то багу андроида, но ничего похожего в багрепорте не видно.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37104907
pwgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex cпопробовать что ли ftp аплоад... может он заработает?
лучше сразу https.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37105275
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас попробовал из дома по wifi. что самое интересное - все отлично работает.... залил порядка 100 мегов картинок.. и все отлично. вероятно все-таки данные портятся при плохом соединении.

я, конечно, не спец, но ведь http - это протокол более высокого уровня. коррекция ошибок должна прекратно работать на уровне tcp и чисто теоретически по хттп вообще битые данные приходить не должны... если пакет был поврежден, он просто не пройдет и будет запрошен еще раз, а если совсем все плохо, то по таймауту сокет отвалится. это же не udp...
как такое вообще может быть?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37106776
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем в конечном итоге поставил tcpdump на телефон.... смотрим дамп. дамп отличный, но есть один нюанс
tcp checksum validation disabled... =) ну и собсно неудивительно, почему всякий хлам приходил на плохих каналах. другой вопрос, почему он выключен и как его включить...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37106801
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а. пардон. не туда посмотрел.. это означало, что wireshark не проверяет их, оказывается .. )
не нашел как удалять или редактировать свои сообщения...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37106852
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем так и не разобрался я, почему происходит такая фигня, но tcpdump на устройстве с андроидом дает неповрежденный файл, а те же самые данные, переданныые на сервер, приходят битые.. что еще осталось попробовать - так это сниффить трафик на удаленном сервере.. в общем все сраннее и сраннее...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37106882
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cв общем так и не разобрался я, почему происходит такая фигня, но tcpdump на устройстве с андроидом дает неповрежденный файл, а те же самые данные, переданныые на сервер, приходят битые.. что еще осталось попробовать - так это сниффить трафик на удаленном сервере.. в общем все сраннее и сраннее...
Вероятность того что данные портятся по дороге, какая-то уж очень маленкая. Так что направление работы верное. Надо проснифить трафик сервера, в момент ошибки, чтобы подтвердить или опровергнуть причастее к этому самого сервера.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37107083
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВероятность того что данные портятся по дороге, какая-то уж очень маленкая. Так что направление работы верное. Надо проснифить трафик сервера, в момент ошибки, чтобы подтвердить или опровергнуть причастее к этому самого сервера.
на сервере пока проснифить не удалось. но вот забавное наблюдение: уменьшил на андроиде mtu до 570 и из 30 картинок все целые... продолжаю пока аплоадить. посмотрим, может быть это никак и не связано, но раньше каждая 3-я была с ошибкой...
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37107099
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex cна сервере пока проснифить не удалось. но вот забавное наблюдение: уменьшил на андроиде mtu до 570 и из 30 картинок все целые... продолжаю пока аплоадить. посмотрим, может быть это никак и не связано, но раньше каждая 3-я была с ошибкой...
Чудеса, да и только.
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37107114
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
50 файлов - все 50 без повреждений.. дело в корявой реализации IP стэка на андроиде?
стоит, наверное, в android-groups написать. правда модерация там уж очень медленная :(
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37107374
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для чистоты эксперимента перегрузил аппарат. отправляю картинки - 4-я по счету - битая
ок. выставил chunk mode в 500 байт.. 0 эмоций. 300 байт - 0 эмоций..
выставляю mtu 576. убираю chunked mode... все путем. уже 82 картинки - полет нормальный..

при этом mtu меняется только на рутованном телефоне... и автоматом из явы, по-моему, этого сделать нельзя...
походу mtu path discovery в андроиде криво реализовано или может быть у отдельных провайдеров icmp фильтруется...

у меня только один вопрос - почему блин я? =) за что мне такие трудности?... =)
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37107391
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может что-то у клиентов на WiFi подкрутить можно?
...
Рейтинг: 0 / 0
Битые картинки при аплоаде файлов по http из Android
    #37107452
alex c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczМожет что-то у клиентов на WiFi подкрутить можно?
а что? если изначально пакет слишком большой по всем меркам (я так понимаю, что все, что выше 1500 - уже много), то он уже будет фрагментироваться.. и по идее эта фрагментация на уровне tcp должна быть невидима и безболезненна для клиента. ведь на пути от клиента до сервера может быть роутеры, максимальный размер пакета для которых еще меньше.. а значит это еще большая фрагментация...
вообще, загадочна вся эта ситуация. и с точки зрения здравого смысла - это все полный бред. так не бывает )
попробую еще более старую версию андроида поставить и посмотреть что будет

один плюс в этом - узнал много нового и вспомнил кучу старого.. =)
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Android [игнор отключен] [закрыт для гостей] / Битые картинки при аплоаде файлов по http из Android
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]