Здравствуйте, уважаемые программисты. У меня возникла неожиданная проблемма с Indy. Программа должна делать загрузку файлов на хостинг. В процессе тестирования выяснилось, что программа отправляет в 2 раза больше трафика: если я загружал файл на 2 Мб - реально моя программа отправляет чуть больше 4-х. Я растерян. Кто встречался с подобным, подскажите решение проблеммы. Пользують D2010, Indy 10.5.5. Спасибо за внимание.
Код загрузки:
function Upload(AURL, AFile: string): string;
var formData: TIdMultiPartFormDataStream;
begin
formData := TIdMultiPartFormDataStream.Create;
try
// Добаляю параметры в formData
// и файл:
formData.AddFile('upsingle',AFile,GetContentType(AFile));
try
Result := idHTTP.Post(AURL,formData);
except
Result := '';
end;
finally
formData.Free;
end;
end;
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
04-11-2009 12:52
Пока не начал рыться ICS - наверное не понял бы причину глюков Инди. Начало - см. »вопрос КС №73859« Оказалось, что Инди после переадресации отпарвляет форму ЕЩЕ РАЗ, и тогда все скрипты работают нормально. Или что-то в этом роде (кто знает больше - поправьте, может, я и не совсем прав). Решыл проблему так: делаю запрос со всеми необходимыми параметрами, кроме файла (можно было пустую форму, но на всякий случай - вдруг перед переадресацией там еще что проверять захотят). Создал обработчик TIdHTTP.OnRedirect и в нем подменяю idHTTP.Request.Source на "нормальный", с файлом.
Смущает то, что барузеры не отправляют лишнего - если был файл на 2 Мб, то уходит 2 с немногим. А моя программа почему-то отправляет 4 с немногим - т.е. лишнего даже чересчур много - в два раза - это ведь не несколько килобайт :((
Может есть какая-нибудь альтернатива библиотека Indy, примерно настолько же удобная и чтоб проект можно было быстро переделать под нее?
Мне перетензии заказчик (если можно так сказать) выставил - файлы отправляються в два раза дольше чем через веб-интерфейс. А сами файлы прекрасно загружаються, если не считать этой проблемы.
Вы думаете, что сформировали поток байт
Я ничего не думаю, я использу библиотеку, которая должна заботиться о том, чтоб мой "поток байт" пришел туда, куда надо. И она справляеться. Но отправляет почему-то не совсем то что нужно (или может не совсем так как нужно - я уже не знаю что и думать по этому поводу).
Я бы может и нашел уже ответ сам, но я даже не знаю куда копать. Хотя бы подскажите возможные причины такого поведения Indy.
Вам хостинг выставил претензию? Или файл загрузился с искажениями? Если оба вопроса - нет, то подумайте сами... Для того чтобы письмо написаное Вами смог прочитать тот, кому Вы его написали...
Вы должны :
1. Изложить свои мысли на бумаге.
2. Запечатать в конверт.
3. НАПИСАТЬ АДРЕС НА КОНВЕРТЕ.
4. Опустить в почтовый ящик.
Почта России (провайдер связи) :
1. Достать письмо из ящика.
2. ....куча фиг знает каких операций.
3. Положить письмо в почтовый ящик адресата.
А в Вашем случае...Вы думаете, что сформировали поток байт, пульнули его в сеть чисто промодулировав напряжение на Tx-ом проводе пачкорда и эти байтики сами найдут себе дорогу? Поставьте себе WireShark, сделайте отправку, наложите фильтр в WireShark-е чтобы увидеть только то, что касается этой отправки... Дальше читаете RFC XXX (их много понадобиться).
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.