powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранить файл из http-запроса
4 сообщений из 4, страница 1 из 1
Сохранить файл из http-запроса
    #39540490
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

По поиску искал, но все темы сводятся на том чтобы отправить файл на сервер или получить файл с сервера, а мне нужно сразу обе операции.
Есть необходимость скачать с сервера файл, но для того чтобы сервер выдал мне файл, я должен оправить на сервер свой файл. Т.е. я отправляю на сервер пустой файл, сервер возвращает мне в ответ заполненный файл.
Если делать всё по отдельности(загрузить файл на сервер или скачать файл с сервера) это я понимаю как:
Скачать файл с сервера:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TForm1.Button2Click(Sender: TObject);
var
  q                                         : TMemoryStream;
begin
  q:=TMemoryStream.Create;
  idHTTP.Get('URL сервера',q);
  q.SaveToFile('файл с сервера.xls');
  q.Free;
end;



Загрузить файл с сервера
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.Button2Click(Sender: TObject);
var
  data_to_server                            : TIdMultiPartFormDataStream;
begin
  IdHTTP1.Request.ContentType := 'multipart/form-data';
  data_to_server := TIdMultiPartFormDataStream.Create;
  data_to_server.AddFile('file', 'мой файл для сервера.xls', 'text/plain');
  Memo1.Lines.Text := IdHTTP1.Post('URL сервера', data_to_server);
  Memo1.Lines.SaveToFile('файл с сервера.xls');
  data_to_server.Free;
  IdHTTP1.Request.ContentType := 'text/html';
end;



Но как это объединить?
В первом варианте, при использовании GET я не понимаю куда присобачить свой файл, чтобы он на сервер ушёл.
Во втором случае, при использовании POST, мой файл уходит и файл с сервера приходит, но как его правильно сохранить в файл не понимаю. Если попадаются непечатные символы, то на них файл и обрезается, это я так понимаю из-за того что я всё в поле Memo помещаю, а как по другому?
Подскажите, как мне правильно файл в ответе от сервера сохранить в файл.
...
Рейтинг: 0 / 0
Сохранить файл из http-запроса
    #39540509
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    function Post(AURL: string; const ASourceFile: String
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: TIdTextEncoding = nil{$ENDIF}
      ): string; overload;
    function Post(AURL: string; ASource: TStrings; AByteEncoding: TIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ASrcEncoding: TIdTextEncoding = nil; ADestEncoding: TIdTextEncoding = nil{$ENDIF}): string; overload;
    function Post(AURL: string; ASource: TStream
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: TIdTextEncoding = nil{$ENDIF}
      ): string; overload;
    function Post(AURL: string; ASource: TIdMultiPartFormDataStream
      {$IFDEF STRING_IS_ANSI}; ADestEncoding: TIdTextEncoding = nil{$ENDIF}
      ): string; overload;

    procedure Post(AURL: string; const ASourceFile: String; AResponseContent: TStream); overload;
    procedure Post(AURL: string; ASource: TStrings; AResponseContent: TStream; AByteEncoding: TIdTextEncoding = nil
      {$IFDEF STRING_IS_ANSI}; ASrcEncoding: TIdTextEncoding = nil{$ENDIF}); overload;
    procedure Post(AURL: string; ASource, AResponseContent: TStream); overload;
    procedure Post(AURL: string; ASource: TIdMultiPartFormDataStream; AResponseContent: TStream); overload;
...
Рейтинг: 0 / 0
Сохранить файл из http-запроса
    #39540528
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, всё получилось:)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.Button2Click(Sender: TObject);
var
  q                                         : TMemoryStream;
  data_to_server                            : TIdMultiPartFormDataStream;
begin
  IdHTTP1.Request.ContentType := 'multipart/form-data';
  q:=TMemoryStream.Create;  
  data_to_server := TIdMultiPartFormDataStream.Create;
  data_to_server.AddFile('file', 'мой файл для сервера.xls', 'text/plain');
  IdHTTP1.Post('URL сервера', data_to_server, q);
  q.SaveToFile('файл с сервера.xls');
  data_to_server.Free;
  q.Free;
  IdHTTP1.Request.ContentType := 'text/html';
end;
...
Рейтинг: 0 / 0
Сохранить файл из http-запроса
    #39540687
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxwellionСпасибо, всё получилось:)Тогда уже приведу код в божеский вид
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure TForm1.Button2Click(Sender: TObject);
var
  q: TMemoryStream;
  data_to_server: TIdMultiPartFormDataStream;
begin
  IdHTTP1.Request.ContentType := 'multipart/form-data';
  try
    q:=TMemoryStream.Create;  
    try
      data_to_server := TIdMultiPartFormDataStream.Create;
      try
        data_to_server.AddFile('file', 'мой файл для сервера.xls', 'text/plain');
        IdHTTP1.Post('URL сервера', data_to_server, q);
        q.SaveToFile('файл с сервера.xls');
      finally
        data_to_server.Free;
      end;
    finally
      q.Free;
    end;
  finally
    IdHTTP1.Request.ContentType := 'text/html';
  end;
end;


Кстати, если
Код: pascal
1.
q: TFileStream;

то строчку
Maxwellion
Код: pascal
1.
q.SaveToFile('файл с сервера.xls');

можно выкинуть
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранить файл из http-запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]