| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Получить файл пользователя, указанный в html форме |
| Автор: VIRTuoZe 6.8.2008, 14:44 | ||||||
| Всех приветствую Возникла небольшая проблема, с которой никак не могу разобраться... скорее всего все элементарно, просто никак не пойму) Есть web-сервер, написанный на delphi с использованием Indy (TidHTTPServer). Когда пользователь запрашивает страницу загрузки файла (через браузер), сервер генерит страницу с такой формой:
Так вот... после отправки данных, я смог только прочитать путь к файлу из параметра fileupload1, а как получить содержимое этого файла? Есть функция:
которая при наличии параметров "PostUserSettings" и "report" вызывается из:
Хоть подскажите в какую сторону копать, откуда вытаскивать содержимое файла?... просто я ни разу с этим не сталкивался Заранее спасибо. |
| Автор: Snowy 6.8.2008, 17:28 |
| В комплекте Indy нет средств для парсинга мультипарт запросов. Для составления есть. А для разбора - нет. Так что воспользуйся каким-нибудь сторонним мультипарт парсером. Например этим: http://www.torry.net/vcl/internet/http/Alcinoe_cmp_3_52_28.zip FWS 8545 k 11 Feb 2008 By Arkadia. MultiPart Alternative objects to encode or Decode stream in mime multipart/Alternative format. Добавлено через 6 минут и 48 секунд Файлик достаточно пухлый, т.к. там весьма приличная библиотека всякой всячины с примерами. Тебе оттуда нужен только парсер. Хотя там много и других полезностей для работы с хттп и прочим. |
| Автор: VIRTuoZe 7.8.2008, 07:57 |
| Snowy, ок, спасибо, сейчас попробую Очень жаль, что стандартными средствами нельзя сделать... не хотелось бы дополнительные компоненты использовать... Попробую - отпишусь о результате) |
| Автор: VIRTuoZe 7.8.2008, 12:22 |
| К сожалению этот компонент существует только в вариантах для D2005 D2006 D2007 D7, а у меня стоит D6 и поменять нет возможности... Пойду искать другие компоненты... или придется все через PHP проводить, у него прием файлов прекрасно работает)) |
| Автор: Snowy 7.8.2008, 12:44 |
| Это не компонент, а библиотечка. Причём в исходняках. Не вижу, что может помешать ей работать в 6-ке. В крайнем случае, можно просто посмотреть, как там сделано. В любом случае разбирать нужно текст. Нарезаешь куски по бинду и анализируешь. Если форма твоя, то даже анализировать необязательно - всё определено заранее. Остаётся только разделить на части и декодировать. |
| Автор: VIRTuoZe 12.8.2008, 16:40 | ||||
| С библиотекой парсера почти разобрался, просто немного недопонял в начале) Возник другой вопрос, с которым уже второй день бьюсь... Если я правильно понял, то нужно просто подключить в uses "ALMultiPartBaseParser", в процедуре обработки запроса объявить переменную типа "TALMultiPartBaseContent", и сделать что-то типа:
при первом же запросе (просто загрузить форму для отправки файла) вылетает "Access violation at address ...". Я смотрю содержимое RequestInfo.PostStream - оно "=nil", ну ладно, ставлю условие "if RequestInfo.PostStream <> nil then begin", так оказывается оно всегда = nil, т.е., если я правильно понял - пусто. Так вот в этом-то и вопрос - а как получить в виде текста содержимое мультипарт-запроса? Т.е., например, в таком виде:
Я бы его и сам распарсил как надо, это не проблема))) Метод "научного тыка" в этот раз подвел... так и не нашел ничего... |
| Автор: VIRTuoZe 13.8.2008, 11:21 | ||||
| ААА!))) Получилось Прочитал я, наконец-то, то что мне надо было)))
А все оказалось банально и просто))) При описании HTML формы у меня всего одна маленькая опечатка:
"metod=POST", а надо "method=POST". Поправил и сразу увидел то, что мне надо, в параметре RequestInfo.UnparsedParams)))) Snowy, еще раз спасибо)) *ушел парсить полученные данные... |