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.

Другие вопросы по тегам