Потеря данных при загрузке файла HttpPost

1

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

HttpParams params = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(params, 15000); 
HttpConnectionParams.setSoTimeout(params, 5 * 60 * 1000); 
HttpClient client = new DefaultHttpClient(params); 
HttpPost  post = new HttpPost("upload url"); 
HttpEntity requestEntity = (new FileEntity(tmpFile, "multipart/form-data;boundary="+boundary); 
post.setEntity(requestEntity); 
HttpResponse response = (HttpResponse) client.execute(post); 

Это прекрасно работает в то время.

Для некоторых телефонов под управлением Android 2.2+ файл, полученный на сервере сторона не завершена. Небольшие части файла просто отсутствуют, и отсутствующие части находятся в разных местах файла каждый раз.

Мы проверили это, сравнив файл с приложением с тем, что принимается на стороне сервера. На стороне сервера мы захватили пакеты с tcpdump, чтобы убедиться, что это не проблема с нашей сетью сервера или веб-сервера.

Мы также проверили данные с помощью tcpdump с телефона. Файл tcpdump с телефона отличается от данных, которые мы пытаемся отправить. В одном случае мы провели анализ файла tcpdump, так как отсутствуют данные между адресом 8d68 и 9000 из файла. Пакеты из tcpdump выстраиваются в линию с этими адресами (один пакет имеет часть данных до 8d68, а затем следующий пакет имеет данные, начиная с 9000).

Для этих телефонов проблема возникает только некоторое время. Иногда файл загружает работу, и весь файл получен без изменений на нашем конце.

Это происходит ТОЛЬКО для телефонов с поддержкой 2.2+. Это происходит в широком разнообразии телефонов и различных носителей, а также для сотен пользователей. Похоже, что это происходит как на Wi-Fi, так и на 3g на основе IP-адресов, видимых на стороне сервера.

Это анекдотично, но, пытаясь заставить это произойти на моем Nexus за последние 2 дня, я видел, как это происходит 6 раз, и те времена всегда были правы, когда я вхожу или выхожу из комнаты близко к определенному Wi-Fi-маршрутизатору, Остальная часть дня, когда я нахожусь в офисе на другом Wi-Fi-маршрутизаторе или в сети сотовой связи, проблема никогда не возникает. Моя теория заключается в том, что приложение занято отправкой данных, и теперь мы переходим от Wi-Fi к сотовой сети или наоборот, является ли это немой идеей или возможностью?

Я могу поместить файлы tcpdump и файлы данных куда-нибудь, если кому-то нужно взглянуть.

Что еще я должен исследовать, чтобы выяснить причину этого?

  • 0
    Как я уже сказал, если вы можете повторить эту ошибку на вашем телефоне, установите tcpdump и посмотрите, что именно покидает ваш телефон. Таким образом, вы будете уверены, что это не приложение
  • 0
    Привет, Алекс! Наконец-то я разобрался, как воспроизвести ошибку на моем телефоне, и записал результат с помощью tcpdump на моем телефоне. Tcpdump ОТЛИЧАЕТСЯ от файла, который я пытаюсь отправить (я отредактировал оригинальный вопрос выше с деталями). Есть идеи, что попробовать сейчас?
Показать ещё 1 комментарий
Теги:
httpclient

1 ответ

0

У меня возникла аналогичная проблема при загрузке двоичных данных. Я понял, что это проблема с кодом сервера. На стороне сервера были некоторые фильтры, которые читали входящие запросы и пытались их зарегистрировать. Код пытался поместить входящий поток в некоторый тип String DS. Из-за этого бинарные изображения были искажены. Просто проверьте, есть ли какие-либо фильтры на стороне сервера. Надеюсь, что это поможет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню