Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Битые картинки при аплоаде файлов по http из Android / 25 сообщений из 49, страница 1 из 2
07.02.2011, 15:31
    #37102394
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
имеем девайс с 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
07.02.2011, 17:20
    #37102732
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
решил проверить, может 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
07.02.2011, 17:35
    #37102771
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
Методы работы с IO у вас в стиле "доку не читал, догадался по названиям методов"
перепишите чтение и запись более традиционным способом. Посмотрите примеры
http://www.exampledepot.com/egs/java.io/CopyFile.html
http://www.exampledepot.com/egs/java.io/File2ByteArray.html
...
Рейтинг: 0 / 0
07.02.2011, 17:47
    #37102817
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
Blazkowicz,

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

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

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

Опыт подсказывает что все проблемы с порчей данных вызваны неаккуратностью работы с IO.
...
Рейтинг: 0 / 0
07.02.2011, 18:09
    #37102882
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
alex cна предмет "перепишите все" - бесполезно. в оригинале использовалась апачевская httpclient
результат был тот же. что-то мне подсказывает, что в апачевской либе работа с IO организована правильно...
Зачем вы тогда код приводите?
...
Рейтинг: 0 / 0
07.02.2011, 18:10
    #37102883
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
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
07.02.2011, 18:18
    #37102902
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
BlazkowiczЗачем вы тогда код приводите?
вначале думал, что проблема в библиотеке.... а тут более развернутый алгоритм - больше поле для "фантазий" =)

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

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

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

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

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

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

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

вот думаю, может быть вместо content-transfer-encoding: binary попробовать через base64 кодировать. потму что текст-то врде нормально доходит....
...
Рейтинг: 0 / 0
08.02.2011, 11:19
    #37103762
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
Проблема только на железках возникает или на эмуляторе тоже?
...
Рейтинг: 0 / 0
08.02.2011, 11:40
    #37103825
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
Проблема никак не связана с конкурентным доступом? Т.е. ошибка проявляется даже если никто другой ничего на сервер не аплоадит?
...
Рейтинг: 0 / 0
08.02.2011, 12:06
    #37103897
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
вот на эмуляторе не пробовал, если честно... картинки с камеры берутся, записываются в файл и по мере надобности отправляются, а т.к. камеры на эмуляторе нет, то тестить там сложно. однако попробую как-то в эмулятор большую картинку запихнуть
на железках = да проявляются. я на 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
08.02.2011, 12:34
    #37103983
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
Смените сервер. Бывают такие вирусы, которые инжектят спам в http трафик.
...
Рейтинг: 0 / 0
08.02.2011, 12:39
    #37104000
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
ээээ. вирус на centos у крупной хостинговой компании?
я, кстати, пробовал менять сервер на другой (уже другая хостинговая компания). результат был тот же. я писал, по-моему, об этом в самом начале. на этом же сервере хостятся куча других наших сайтов и с аплоадом картинок из браузера, через flash, да и просто передача данных с форм, проходит на ура.. проблема именно в стыковке андроид приложения и сервера :(
...
Рейтинг: 0 / 0
08.02.2011, 12:58
    #37104059
alex c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
в общем судя по всему ,проблему на форуме решить не представляется возможным, т.к. все, кого ни спрашиваю, в шоке от такой ерунды. )
буду, наверное, аплоад отдельно от программы тестировать. напишу прогу, которая отправляет 1 и ту же картинку постоянно..
и если заработает, значит вирус - это я. и где-то намудрил. хотя как так можно намудрить - не понимаю )

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

Гугл подсказывает что кто-то в это время читал
"10 причин не идти на Дэвида Айка"
...
Рейтинг: 0 / 0
08.02.2011, 14:25
    #37104300
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битые картинки при аплоаде файлов по http из Android
У меня аналогичная проблема возникла, но только из iPhone. Пока её также не решил, если найду решение - отпишусь в этой теме.
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Битые картинки при аплоаде файлов по http из Android / 25 сообщений из 49, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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