ISAPI DLL. Visual C++. Передача файла на сервер.
От: Arkadi  
Дата: 15.07.02 05:40
Оценка:
Вобщем первая функция отрабатывает нормально:
void CMy555Extension::Default(CHttpServerContext* pCtxt)
{ ....
*pCtxt << _T("<FORM ENCTYPE=multipart/form-data name=form1 action=555.dll?Deistv method=post>");
*pCtxt << _T("<Отправить данный файл: <INPUT NAME=userfile TYPE=file>");
*pCtxt << _T("<INPUT name=knopka TYPE=submit VALUE=Отправить>");
....}
А дальше сплошные вопросы...
Делаю карту:
ON_PARSE_COMMAND(Deistv, CMy555Extension,ITS_RAW)
ON_PARSE_COMMAND_PARAMS("userfile")
И саму функцию:
void CMy555Extension::Deistv(CHttpServerContext* pCtxt,LPVOID userfile)
{...
hFile = CreateFile(...

pCtxt->GetServerVariable("CONTENT_LENGTH",(void*) size,(unsigned long *)4);
WriteFile(hFile,userfile,size, (unsigned long *)&s,NULL);
... }
Возвращает 400-ю ошибку. Плохой запрос...

Подскажите пожалуйста, как правильно эту функцию оформить и какие еще параметры в нее передавать из Default(), чтобы получить имя файла , и правильный размер ?
PS: не пинайте за ламерство если что не так... я вобщето больше с СУБД работаю, а тут вот приперло и именно на VC 6.
PPS: Заранее Спасибо.
Re: ISAPI DLL. Visual C++. Передача файла на сервер.
От: Lexey Россия  
Дата: 15.07.02 08:04
Оценка:
Здравствуйте Arkadi, Вы писали:

MFC в ISAPI — жуть-то какая.

A>Вобщем первая функция отрабатывает нормально:

A>void CMy555Extension::Default(CHttpServerContext* pCtxt)
A>{        ....
A>    *pCtxt << _T("<FORM ENCTYPE=multipart/form-data name=form1 action=555.dll?Deistv method=post>");
A>         *pCtxt << _T("<Отправить данный файл: <INPUT NAME=userfile TYPE=file>");
A>         *pCtxt << _T("<INPUT name=knopka TYPE=submit VALUE=Отправить>");
A>         ....}
A>А дальше сплошные вопросы...
A>Делаю карту:
A>    ON_PARSE_COMMAND(Deistv, CMy555Extension,ITS_RAW)
A>         ON_PARSE_COMMAND_PARAMS("userfile")
A>И саму функцию:
A>void CMy555Extension::Deistv(CHttpServerContext* pCtxt,LPVOID userfile)
A>{...
A>hFile = CreateFile(...

pCtxt->>GetServerVariable("CONTENT_LENGTH",(void*) size,(unsigned long *)4);
A>WriteFile(hFile,userfile,size, (unsigned long *)&s,NULL);
A>... }

A>Возвращает 400-ю ошибку. Плохой запрос...

И правильно делает. MFCшный класс умеет обрабатывать параметры запросов GET И POST с ОБЫЧНЫМ url-encoding'ом. А в multipart все совсем по другому. Поэтому не находит оно параметр userfile и запрос отвергает.

A>Подскажите пожалуйста, как правильно эту функцию оформить и какие еще параметры в нее передавать из Default(), чтобы получить имя файла , и правильный размер ?


MFC тут тебе ничем не поможет. И никаких готовых средств для ISAPI я не знаю. По поводу того, как устроен multipart, можешь почитать RFC 1867. При наличии желания и умения собственный декодер мультипарта пишется за 2-3 дня.
Re[2]: ISAPI DLL. Visual C++. Передача файла на сервер.
От: Arkadi  
Дата: 15.07.02 09:07
Оценка:
Спасибо за ответ... я 5-й курс заканчиваю, это фактически был последний экзамен. И на нем вот такое практическое задание... в VC6 за 1,5 часа сделать isapi dll, которая бы принимала от клиента файл и сохраняла на сервере )
Re: ISAPI DLL. Visual C++. Передача файла на сервер.
От: Arkadi  
Дата: 15.07.02 09:23
Оценка:
Спасибо за ответ... Все бы ничего, если бы это было не практическое задание на экзамене... за 1,5 часа нужно было сделать эту dll-ку на VC6...
Re: ISAPI DLL. Visual C++. Передача файла на сервер.
От: sndralex Израиль www.gdetotam.co.il
Дата: 15.07.02 11:12
Оценка:
Здравствуйте Arkadi,
взгляните сюда, может поможет.
Alexander N. Treyner
Re[3]: ISAPI DLL. Visual C++. Передача файла на сервер.
От: Lexey Россия  
Дата: 16.07.02 16:33
Оценка:
Здравствуйте Arkadi, Вы писали:

A>Спасибо за ответ... я 5-й курс заканчиваю, это фактически был последний экзамен. И на нем вот такое практическое задание... в VC6 за 1,5 часа сделать isapi dll, которая бы принимала от клиента файл и сохраняла на сервере )


Составитетели экзамена офигели чтоли?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.