C++ Builder Загрузка изображений с URL
У меня проблемы с выяснением, как загрузить изображение с URL-адреса в элемент управления TImage.
В общем, это то, что мне нужно сделать
TMemoryStream *str = new TMemoryStream;
http->Get("http://myurl.mydomain.com/myimage.jpg", str);
Кажется, проблема в том, что str не имеет выделенного для него пространства. И я получаю "Недопустимая ошибка дескриптора ввода-вывода".
Я не могу узнать размер изображения перед рукой.
Как мне это сделать, пожалуйста? Я попытался выделить 10 МБ пространства для TMemoryStream, создав фиктивный файл и загрузив этот файл в TMemoryStream, но это также выдает ошибку "Invalid IO Handler".
Использование C++ Builder в RAD Studio XE7 для разработки приложений для iOS и Android.
большое спасибо
Айер
1 ответ
Проблема не в коде, который вы показали. TMemoryStream
растет динамически, как данные записываются в него, и TIdHTTP::Get()
будет записывать любые данные, которые сервер фактически отправляет. Синтаксис кода, который вы показали, в порядке.
Если вы получаете сообщение об ошибке "Значение IOHandler недопустимо" от Get()
, это означает, что HTTPS URL запрашивается, но TIdSSLIOHandlerSocketBase
компонент (например, TIdSSLIOHandlerSocketOpenSSL
) не назначен TIdHTTP::IOHandler
свойство для обработки шифрования SSL/TLS. Ваш код запрашивает URL-адрес HTTP, поэтому сервер, скорее всего, отправляет ответ о перенаправлении, чтобы сообщить TIdHTTP
вместо этого запросить URL-адрес HTTPS (проверьте TIdHTTP::OnRedirect
событие для проверки). Вам необходимо назначить SSL IOHandler для обработки URL-адресов HTTPS.