![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправка файла post запросом, вместо параметра вопросы
Погроммист © (2016-04-04 02:33:00)
Function Upload(Fi: TStream; AFileName: AnsiString;
ProductName: AnsiString): boolean;
var
formData: TMyIdMultiPartFormDataStream;
begin
Result := false;
formData := TMyIdMultiPartFormDataStream.Create;
formData.AddFileStream('file', AFileName, Fi);
formData.AddFormField('ProductName', ProductName); //тут русский
IdHTTP.Request.AcceptCharSet := 'windows-1251';
IdHTTP.Request.ContentType := 'multipart/form-data';
errorMessage := IdHTTP.Post(URL, formData,IndyTextEncoding(1251)
);
пытаюсь пост запросом отправить файл и параметры с ним, параметры могут быть на кирилице. Но пхп скрипт получает эту кирилицу в виде '?????????'. Нашел несколько тем на эту тему, но так и не понял что мне делать. В методе пост есть третий параметр, как раз про кодировку, но вот что туда нужно передавать и как я понять не могу. Попробовал передавать IndyTextEncoding(1251), но он говорит что такой перегруженной функции нет, которую можно вызывать с такими параметрами.
функция пост объявлена там как
TIdCustomHTTP.Post(AURL: string; ASource: TIdMultiPartFormDataStream
{$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF}
и вот что значит директива {$IFDEF STRING_IS_ANSI} мне как то непонятно, но может из за нее параметр не добавляется. А что делать?
Погроммист (2016-04-05 04:59:00) [1]эм нашел, если сделать так
formData.AddFormField('ProductName', '=').ContentTransfer := '8bit';
то вроде норм.
Погроммист (2016-04-05 02:35:00) [2]причем если после заполнения вызывать temp := formData.FFields.Items[3].FieldValue;
то значение '=', где появляется это 3D?
Погроммист (2016-04-05 02:33:00) [3]а если скрипт запустить из командной строки браузера и передать '=' то в скрипт приходит тоже '=' :-(
Т.е. это IdMultiPartFormDataStream какую то фигню отправляет (
Погроммист (2016-04-05 01:42:00) [4]он символ '=' в ходе передачи превращает в '=3D'
Погроммист (2016-04-05 01:37:00) [5]попробовал перекодировать в Base64
ProductName := EncodeString(ProductName);
результат 'xODw6iDu8OHo8g=='
а сервер получает 'xODw6iDu8OHo8g=3D=3D'
почему? как исправить?
Awak00m (2016-04-04 20:28:00) [6]Возможно, я ошибаюсь, я не встречал передачи кириллицы без кодировки в %ХХ.
{$IFDEF STRING_IS_ANSI} насколько я понимаю, относится не к кодировке, а к размеру типа Char. И тогда, это зависит только от версии Delphi.
А на том конце сервер Ваш? Если да, то закодируйте все, что хотите, в BASE64, на том конце раскодируйте, и можете хоть дампы памяти передавать. Я бы так сделал.
Погроммист (2016-04-04 16:02:00) [7]ну видимо на UTF8, а как узнать?
но главная проблема, что значит {$IFDEF STRING_IS_ANSI} когда этот параметр активен и почему я не могу его использовать?
KSergey (2016-04-04 10:40:00) [8]Еще вот тут опробуйте читнуть, вдруг что-то поможет
http://forum.vingrad.ru/forum/topic-318946.html
KSergey (2016-04-04 10:37:00) [9]А веб-сервер на какую кодировку настроен?