|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
имеем девайс с 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.
класс аплоада тут: Код: 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.
в результате в большинстве случаев получаем на выходе битую картинку пример: картинка в оригинале - взята с 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 и он просто не пропустит битый блок данных... спасибо заранее за ответы. надеюсь подскажете как решить проблему, а то бьюсь третий день уже. только караул еще не кричу... =) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 15:31 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
решил проверить, может FileInputStream глючит как-то изменил немного код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
в результате, когда картинка на сервере аплоадится битая, файл сохраняется на sd идеально.. это какой-то баг в HttpURLConnection или у меня совсем кривые руки? =) люди, SOS, ПОМОГИТЕ! =) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 17:20 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Методы работы с IO у вас в стиле "доку не читал, догадался по названиям методов" перепишите чтение и запись более традиционным способом. Посмотрите примеры http://www.exampledepot.com/egs/java.io/CopyFile.html http://www.exampledepot.com/egs/java.io/File2ByteArray.html ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 17:35 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Blazkowicz, пусть так, но сути это не меняет. размер на сервере - идентичный. но данные внутри покоцаные в той или иной степени. если вы мне подскажете каким образом порча данных при передаче по http может быть вызвана "не совсем корректным с точки зрения guru" написанием кода - буду очень благодарен на предмет "перепишите все" - бесполезно. в оригинале использовалась апачевская httpclient и конструкция была предельно простая: reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("image", new FileBody(new File(...)), "image/jpeg")); и далее через defaulthttpclient результат был тот же. что-то мне подсказывает, что в апачевской либе работа с IO организована правильно... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 17:47 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
alex cесли вы мне подскажете каким образом порча данных при передаче по http может быть вызвана "не совсем корректным с точки зрения guru" написанием кода - буду очень благодарен Опыт подсказывает что все проблемы с порчей данных вызваны неаккуратностью работы с IO. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 18:01 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
alex cна предмет "перепишите все" - бесполезно. в оригинале использовалась апачевская httpclient результат был тот же. что-то мне подсказывает, что в апачевской либе работа с IO организована правильно... Зачем вы тогда код приводите? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 18:09 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Blazkowicz, ну вот смотрите в оригинале это было примерно так: Код: plaintext 1. 2. 3. 4.
и класс собсно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
а вот потом уже начались танцы с бубнами и пробование всего, чего угодно. тут все достаточно гладко, на мой дилетантский взгляд... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 18:10 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
BlazkowiczЗачем вы тогда код приводите? вначале думал, что проблема в библиотеке.... а тут более развернутый алгоритм - больше поле для "фантазий" =) вообще, мне начинает казаться, что проблема кроется в froyo, т.е. у некоторых программ возникали проблемы подобного рода.. к сожалению, никаких workaround кроме как передавать checksum и в случае несоответствия отправлять заново, я не нашел. но в данном случае это не вариант, потому что на конечных устройствах битыми приходят 95% изображений :( т.е. это бесполезная трата трафика :( хотя вариант с кривыми руками имеет право на существование. они действительно пока не очень прямые, к сожалению... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 18:18 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 18:24 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Что если попробовать entity.setChunked(true); для аплоада мелкими порциями? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2011, 18:37 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Blazkowicz http://blog.pixelpipe.com/2010/10/22/having-corruption-issues-with-your-android-2-2-media-uploads/ да. про это я читал. но никаких решений проблемы в нете, к сожалению, не нашел. возможно плохо искал. но что-то мне подсказывает, что здесь не совсем мой случай. потому что 1) картинки берутся просто как файл с файловой системы без участия mediastore 2) размер файла-то как раз нормальный. а вот внутри - ужас :( видел посты про просто бьющиеся картинки, но там как решение - тупо проверять чексум файла. но тут не вариант - почти все картинки битые, так что будет отправлять до бесконечности, пока трафик не кончится :( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 09:17 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
BlazkowiczЧто если попробовать entity.setChunked(true); для аплоада мелкими порциями? спасибо за идею. хоть что-то.. пойду документацию читать и пробовать. кстати, забыл сказать, что с указанным куском кода тоже была проблема, решить которую у меня ну вообще не получилось :( в связи с тем, что качество связи там, где эта программа должна использоваться, отвратительное, проводил тест: начинается аплоад картинки, в это время отключаем 3g. и висим =) таймаут срабатывает через 17-20 минут. хотя все таймауты минимальные. причем, если, например, связи нет изначально ДО того, как началась отправка, то таймаут срабатывает очень четко. т.е. даже 3g поднят, но связь плохая, 3 секунды - и sockettimeoutexception срабатывает. как только не пробовал... и как в коде у меня приведено. и наоборот, сначала создавая параметры и передавая их в конструктор httpclient'а.. и connectionmanager пробовал создавать и ему уже указывать... как об стенку горох ) не везет мне как-то с аплоадом этим ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 09:29 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
alex cвидел посты про просто бьющиеся картинки, но там как решение - тупо проверять чексум файла. но тут не вариант - почти все картинки битые, так что будет отправлять до бесконечности, пока трафик не кончится :( Существуют восстанавливающие алгоритмы. Но тут, судя по тому что целые куски в хлам, они могут не помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 09:30 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
BlazkowiczСуществуют восстанавливающие алгоритмы. Но тут, судя по тому что целые куски в хлам, они могут не помочь. да. скорее всего это не вариант. я вверху привел результат compare двух файлов... причем, это самый хороший вариант. на клиентских девайсах картинки вообще не видно. одни полоски. =) кстати, к сожалению, не нашел ничего связанного с setchunked у multipartentity вот думаю, может быть вместо content-transfer-encoding: binary попробовать через base64 кодировать. потму что текст-то врде нормально доходит.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 10:47 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Проблема только на железках возникает или на эмуляторе тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 11:19 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Проблема никак не связана с конкурентным доступом? Т.е. ошибка проявляется даже если никто другой ничего на сервер не аплоадит? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 11:40 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
вот на эмуляторе не пробовал, если честно... картинки с камеры берутся, записываются в файл и по мере надобности отправляются, а т.к. камеры на эмуляторе нет, то тестить там сложно. однако попробую как-то в эмулятор большую картинку запихнуть на железках = да проявляются. я на hd2 тестирую, клиентские - galaxy tab... т.е. железо, подозреваю, ни при чем. попробовал в base64.. был просто в шоке =) в общем передалал код вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
правда я не уверен, можно ли так делать.. в середине работы с потоком оборачивать его в другой поток, а потом снова с исходным работать, но флаг 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.
первые 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 в текстовый файл ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 12:06 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Смените сервер. Бывают такие вирусы, которые инжектят спам в http трафик. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 12:34 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
ээээ. вирус на centos у крупной хостинговой компании? я, кстати, пробовал менять сервер на другой (уже другая хостинговая компания). результат был тот же. я писал, по-моему, об этом в самом начале. на этом же сервере хостятся куча других наших сайтов и с аплоадом картинок из браузера, через flash, да и просто передача данных с форм, проходит на ура.. проблема именно в стыковке андроид приложения и сервера :( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 12:39 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
в общем судя по всему ,проблему на форуме решить не представляется возможным, т.к. все, кого ни спрашиваю, в шоке от такой ерунды. ) буду, наверное, аплоад отдельно от программы тестировать. напишу прогу, которая отправляет 1 и ту же картинку постоянно.. и если заработает, значит вирус - это я. и где-то намудрил. хотя как так можно намудрить - не понимаю ) спасибо, что потратили на меня свое время ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 12:58 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
в общем резюмируя для чистоты эксперимента сделал следующую прогу. привожу весь текст Код: 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.
тут уж вообще негде мудрить, т.к. это весь листинг программы. причем пробовал и с httpcomponents и напрямую работая с httpconnection (строчки закомменченные) поменял сервер на вообще другой.. итог. с httpconnection - из 10 аплоадов 2 битых httpcomponents - из 13 аплоадов 4 битых я сдаюсь ) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 13:54 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
забыл сказал. используемое соединение - 3g от мегафона. через wifi нет возможности попробовать, к сожалению... сейчас буду пытаться файл загрузить на эмулятор и тестировать на эмуляторе под разными версиями android'а ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 14:00 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
Если посылать файлы размером в 1-2Кб, то они тоже могут портиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 14:02 |
|
Битые картинки при аплоаде файлов по http из Android
|
|||
---|---|---|---|
#18+
alex couRycdRTCmD3p7KGX274pBKyMVBOAPxqWvvHtoMторым был раньше. Оно тебе надо?<br> Гугл подсказывает что кто-то в это время читал "10 причин не идти на Дэвида Айка" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2011, 14:11 |
|
|
start [/forum/topic.php?fid=13&fpage=30&tid=1331842]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 294ms |
total: | 444ms |
0 / 0 |