Добавление метода «AddStream» в TMultipartFormData для использования с TNetHTTPClient.Post - PullRequest
0 голосов
/ 16 сентября 2018

Использование Delphi 10.2.3,

Я хочу загрузить изображение из TStream на веб-сервер, используя TNetHTTPClient.Post и TMultipartFormData.

Моя проблема заключается в том, что класс TMultipartFormData неу меня есть функция AddStream (я предполагаю, что для генерации mime-типа ему нужно имя файла), поэтому я решил добавить свой собственный, так как заранее знаю типы mime (и правильное имя файла).

Я никогда не использовал наследование классов или помощников классов в Delphi 10.2.3, и, прочитав и опробовав это, я достиг точки, где явно что-то упускаю, но не могу понять, что.

Iпопробовал:

Type
  TMultipartFormDataStream = class (TMultipartFormData)
    procedure AddStream(AStream : TStream; const AFieldName, AFilePath: string);
  end;

procedure TMultipartFormDataStream.AddStream(AStream : TStream; const AFieldName, AFilePath: string);
var
  LType: string;
begin
  AdjustLastBoundary;
  WriteStringLn('--' + FBoundary);
  WriteStringLn(sContentDisposition + ': form-data; name="' + AFieldName + '"; filename="' + ExtractFileName(AFilePath) + '"'); // do not localize
  LType := GetFileMIMEType(AFilePath);
  WriteStringLn(sContentType + ': ' + LType + #13#10); // We need 2 line break here   // do not localize
  try
    FStream.CopyFrom(AStream, 0);
  finally
  end;
  WriteStringLn('');
end;

Однако ни одна из унаследованных закрытых функций класса не доступна.

Я также попытался использовать помощник класса вместо прямого наследования, но опять же закрытые функции не доступны иЯ бы предпочел не использовать взлом RTTI.

Какое лучшее решение / способ обойти загрузку изображения из потока с помощью TNetHTTPClient?Действительно ли мне нужно сохранить поток в файл, чтобы добавить его в данные многоэлементной формы?

1 Ответ

0 голосов
/ 25 октября 2018

Эта проблема решена в Delphi 10.3, где расширен интерфейс с возможностью непосредственного использования потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...