Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.03.25;
Скачать: CL | DM;

Вниз

Отправка файла post запросом, вместо параметра вопросы   Найти похожие ветки 

 
Погроммист   (2016-04-04 02:33) [0]


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} мне как то непонятно, но может из за нее параметр не добавляется. А что делать?


 
KSergey ©   (2016-04-04 10:37) [1]

А веб-сервер на какую кодировку настроен?


 
KSergey ©   (2016-04-04 10:40) [2]

Еще вот тут опробуйте читнуть, вдруг что-то поможет
http://forum.vingrad.ru/forum/topic-318946.html


 
Погроммист   (2016-04-04 16:02) [3]

ну видимо на UTF8, а как узнать?

но главная проблема, что значит {$IFDEF STRING_IS_ANSI} когда этот параметр активен и почему я не могу его использовать?


 
Awak00m   (2016-04-04 20:28) [4]

Возможно, я ошибаюсь, я не встречал передачи кириллицы без кодировки в %ХХ.
{$IFDEF STRING_IS_ANSI} насколько я понимаю, относится не к кодировке, а к размеру типа Char. И тогда, это зависит только от версии Delphi.

А на том конце сервер Ваш? Если да, то закодируйте все, что хотите, в BASE64, на том конце раскодируйте, и можете хоть дампы памяти передавать. Я бы так сделал.


 
Погроммист   (2016-04-05 01:37) [5]

попробовал перекодировать в Base64

ProductName        := EncodeString(ProductName);

результат "xODw6iDu8OHo8g=="

а сервер получает "xODw6iDu8OHo8g=3D=3D"

почему? как исправить?


 
Погроммист   (2016-04-05 01:42) [6]

он символ "=" в ходе передачи превращает в "=3D"


 
Погроммист   (2016-04-05 02:33) [7]

а если скрипт запустить из командной строки браузера и передать "=" то в скрипт приходит тоже "=" :-(

Т.е. это IdMultiPartFormDataStream какую то фигню отправляет (


 
Погроммист   (2016-04-05 02:35) [8]

причем если после заполнения вызывать temp := formData.FFields.Items[3].FieldValue;

то значение "=", где появляется это 3D?


 
Погроммист   (2016-04-05 04:59) [9]

эм нашел, если сделать так

formData.AddFormField("ProductName", "=").ContentTransfer := "8bit";

то вроде норм.



Страницы: 1 вся ветка

Текущий архив: 2018.03.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.004 c
15-1470764730
DayGaykin
2016-08-09 20:45
2018.03.25
Align: К вопросам на засыпку.


2-1459514237
Макака
2016-04-01 15:37
2018.03.25
Подсветка кода


1-1356094804
AxNb
2012-12-21 17:00
2018.03.25
ThreadID всех динамических потоков почему-то всегда одинаковый.


4-1287656966
Zheksonz
2010-10-21 14:29
2018.03.25
Как определить находится ли Windows в режим выбора пользователя.


2-1460013191
aka
2016-04-07 10:13
2018.03.25
Указатели