Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2015, 11:00   #1
droltromed
 
Регистрация: 21.01.2012
Сообщений: 8
По умолчанию MultiPartFormData загрузка файла в кириллице

Добрый день.
Появилась такая проблема:
при загрузке файла на сервер файл передаётся в кодировке KOI8-R (судя по названию файла), если в его названии есть кириллица.
Если название состоит из латиницы, то файл корректно заливается с нормальным названием.

Например, в listbox1 содержится путь к файлу с названием
Код:
Картинка 1.png
Файл пытается залиться на сервер с названием
Код:
=?KOI8-R?B?68HS1MnOy8E=?= 1.png
Пытался в недрах библиотеки IdMultipartFormData менять строку
Код:
LItem.FFileName := ExtractFileName(AFileName)
в функционале добавления файла, но, как оказалось, эта строка вообще игнорируется.

Использующийся код в проекте:
Код:
var MultiData:TIdMultiPartFormDataStream;

MultiData:=TIdMultiPartFormDataStream.Create;
MultiData.AddFile('userFile',listbox1.Items[i],'')
html:=form1.idhttp1.Post('site.ru',MultiData);
В чём может быть причина и как загрузить файл в кириллице корректно?
droltromed вне форума Ответить с цитированием
Старый 13.10.2015, 11:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пытался в недрах
За порчу генофонда руки нужно отрывать.
Ты уверен, что сам сервер корректно обрабатывает кириллицу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2015, 12:02   #3
droltromed
 
Регистрация: 21.01.2012
Сообщений: 8
По умолчанию

Цитата:
За порчу генофонда руки нужно отрывать.
Ты уверен, что сам сервер корректно обрабатывает кириллицу?
Иного выбора нет.
Либо модифицировать MultiPart, либо искать\писать аналог.

Сервер кириллицу обрабатывает корректно. Через браузер заливается кириллица отлично.
droltromed вне форума Ответить с цитированием
Старый 13.10.2015, 12:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А какая у тебя версия Indy?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2015, 12:11   #5
droltromed
 
Регистрация: 21.01.2012
Сообщений: 8
По умолчанию

Цитата:
А какая у тебя версия Indy?
10.6.2.5298.

Версия MultiPartFormData - 1.17.
droltromed вне форума Ответить с цитированием
Старый 13.10.2015, 12:36   #6
droltromed
 
Регистрация: 21.01.2012
Сообщений: 8
По умолчанию

Если есть альтернативные варианты MultiPartFormData для заливки файла с кириллицей на сервер, буду рад увидеть. Надеюсь, найдётся вариант решения проблемы.
droltromed вне форума Ответить с цитированием
Старый 13.10.2015, 13:46   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

разве в мультипарте нельзя кодировку указать?
у вас сервер принимает или нет такие файлы?
ибо по запросу видно что имя файло просто кодировано(оно и не может чистым текстом идти)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.10.2015, 14:23   #8
droltromed
 
Регистрация: 21.01.2012
Сообщений: 8
По умолчанию

Цитата:
разве в мультипарте нельзя кодировку указать?
Можно, но только для AddFormField.
Для AddFile кодировку указать нельзя, только тип вложения (ContentType)..
В теории, через AddFormField можно и файл залить, но тогда файл придётся заливать в поток и потом его отправлять.

Цитата:
у вас сервер принимает или нет такие файлы?
ибо по запросу видно что имя файло просто кодировано(оно и не может чистым текстом идти)
Именно такую кодировку не принимает. Файл просто игнорируется.
Если заливать через браузер, то корректно заливается независимо от того, кириллица или латиница.
Причём кириллицу он заливает в кодировке UTF-8.
Файл с названием "завести.png" выглядит в запросе как "Завести.png".
А через MultiData.AddFile заливается только если латиница.

Последний раз редактировалось droltromed; 13.10.2015 в 14:27.
droltromed вне форума Ответить с цитированием
Старый 07.04.2016, 19:32   #9
droltromed
 
Регистрация: 21.01.2012
Сообщений: 8
По умолчанию

Спустя 5 лет случайно нашёл ответ на вопрос. Натыкался много раз на свои же темы (которых две - одна 5 летней давности, вторая - двухлетней).
Ответ получил практически от самих создателей среды программирования.
Нашёл решение здесь: https://forum.antichat.ru/threads/301327/
Итак, корректная загрузка файла на сервер с содержанием кириллицы в названии:

Код:
MultiData:=TIdMultiPartFormDataStream.Create; //создаём запрос для отправки
fs:=TFileStream.Create(NameFile, fmOpenReadWrite); //загоняем файл в поток, NameFile - путь к файлу
//готовим файл к отправке, fs - поток с файлом, NameTS - название файла, в котором и заключалась проблема, его здесь можно писать на кириллице (!).
with MultiData.AddFormField('file_0', 'application/vnd.ms-excel', '', fs, NameTS) do
begin
 HeaderCharset := 'utf-8'; //указываем кодировку
 HeaderEncoding := '8'; //указываем формат обработки
end;
idhttp1.Post(server,Multidata); //отправляем сформированный запрос на сервер
Эврика, файл корректно отправился в потоке и загрузился с кириллицей в названии. Ответ на проблему был в поисках многие годы, и теперь проблема решена.

Последний раз редактировалось droltromed; 07.04.2016 в 19:37.
droltromed вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Домен на кириллице и вконтакте civin Помощь студентам 3 09.02.2015 18:14
Генератор слов на кириллице Fedaykin Фриланс 2 09.11.2013 18:30
И снова о кириллице Hemul Visual C++ 2 24.01.2011 16:25
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
Имена загружаемых файлов на кириллице krok PHP 3 05.12.2008 10:42