Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблемы с загрузкой файла при использовании TIdHTTP в FMX Android

Delphi , Интернет и Сети , URL

Загрузка файла с помощью TIdHTTP в приложении FMX Android может вызвать определенные проблемы, если не учитывать некоторые нюансы. В этом руководстве мы рассмотрим, как решить проблему загрузки файла на основе команды curl и предоставим рабочий пример кода на Object Pascal (Delphi).

Проблема

Пользователь предоставил следующую команду curl для загрузки файла на хост:

curl -T http://<ip-address>:<port> file.txt

При вызове этой команды из командной строки Windows мы получаем следующий вывод:

*   Trying <ip-address>...
* TCP_NODELAY set
* Connected to <ip-address> (<ip-address>) port <port> (#0)
> PUT /file.txt HTTP/1.1
> Host: <ip-address>:<port>
> User-Agent: curl/7.55.1
> Accept: */*
> Content-Length: 682
> Expect: 100-continue
>
* Done waiting for 100-continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< content-length: 0
< date: Tue, 16 Jun 2020 19:24:18 GMT
< connection: close
<
* Closing connection 0

Файл успешно загружается на хост, но при попытке воспроизвести это поведение с помощью Indy в приложении FMX Android файл не появляется в указанном каталоге, хотя статус-код 200 возвращается.

Решение

Для решения этой проблемы важно правильно настроить TIdHTTP и TFileStream. Вот рабочий пример кода на Object Pascal (Delphi), который воспроизводит поведение команды curl:

var
  FHTTP: TIdHTTP;
  file2send: string;
  FPutData : TFileStream;
begin
  if not OpenDialog1.Execute then Exit;

  file2send := OpenDialog1.FileName;

  FHTTP := TIdHTTP.Create(nil);
  try
    FHTTP.Request.UserAgent := 'curl/7.55.1';
    FPutData := TFileStream.Create(file2send, fmOpenRead or fmShareDenyWrite);
    try
      FHTTP.Put(PutURL.Text + '/' + ExtractFileName(file2send), FPutData, TStream(nil));
    finally
      FPutData.Free;
    end;
  finally
    FHTTP.Free;
  end;
end;

Примечания:

  1. Убедитесь, что URL, переданный в метод FHTTP.Put(), имеет следующий формат: 'http://:/file.txt', а не 'http://:'.
  2. Установите свойство FHTTP.Request.UserAgent, так как некоторые веб-серверы отклоняют пользовательский агент по умолчанию Indy.
  3. Убедитесь, что вы освобождаете объекты, особенно если планируете обновить до 10.4 Sydney или более поздней версии, поскольку в 10.4 была удалена ARC для управления ciclo

Создано по материалам из источника по ссылке.

Приложение FMX Android столкнулось с трудностями при загрузке файла с помощью TIdHTTP, и в руководстве рассматривается решение этой проблемы на основе команды curl, с примерами кода на Object Pascal (Delphi).


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: URL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 22:02:09/0.0044600963592529/0