Загрузка изображения Delphi XE6 с мобильных устройств на сервер

Вопрос:

Я пытаюсь создать приложение, которое позволит пользователю размещать свое изображение со своего мобильного устройства на веб-сервере. Я пытался сделать это в течение нескольких дней и не нашел способ сделать это с помощью XE6… У кого-нибудь есть ключ?

Я попытался использовать библиотеку RestClient, но не могу найти способ привязки изображения к параметру в запросе на отдых. Моя последняя попытка: –

var
mStream : TMemoryStream;
fileData : TJSONArray;
begin
mStream  := TMemoryStream.Create();
image1.Bitmap.SaveToStream(mStream);
fileData := TDBXJSONTools.StreamToJSON(mStream, 0, mStream.Size);
restRequest1.Params.ParameterByName('file').Value := fileData.Value;
restRequest1.Execute;
mStream.Free;
end;

Ничего не происходит в параметре файла на стороне сервера.

Я также попытался использовать MultiPartFormDataStream на компоненте IdHttp, но метод AddFile ожидает имя файла… Поскольку я беру изображение с камеры, у меня нет имени файла, так что это тоже меня озадачило. И я не мог найти способ привязки потока к одному из параметров на этом.

Я также попытался использовать IDHTTP для отправки потока непосредственно на сервер, который является сервером PHP, но запрос не содержал никаких данных, кроме обычных HTTP-заголовков.

Заранее благодарю за любую помощь.

Лучший ответ:

Чтобы загрузить поток в виде поля формы HTML с помощью Indy, вам необходимо использовать TIdMultiPartFormDataStream. AddFormField TIdMultiPartFormDataStream. AddFormField.

Вы также можете передать и другие поля.

uses IdHTTP, IdMultipartFormData;

var
  http: TIdHttp;
  multiStream: TIdMultiPartFormDataStream;
begin
  multiStream := TIdMultiPartFormDataStream.Create;
  try
    multiStream.AddFormField('field1', 'image/jpeg', '', sourceStream, 'image1.jpg');
    multiStream.AddFormField('field2', 'value2');

    http := TIdHttp.Create(nil);
    try
      http.Post(url, multiStream);
    finally
      http.Free;
    end;
  finally
    multiStream.Free;
  end;
end;

Параметр имени файла является необязательным и будет храниться в PHP $_FILES['field1']['name'].

Оцените статью
TechArks.Ru
Добавить комментарий