powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Загрузка файлов на сайт методом POST
6 сообщений из 6, страница 1 из 1
Загрузка файлов на сайт методом POST
    #39781506
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Есть у меня потребность реализовать алгоритм по теме, скажу сразу, что в данной теме я новичок. Есть у нас с компании ресурс, на котором работает API и система способна принимать запросы, содержащие файл, складывать его себе в хранилище, а в ответ отдавать определенный ID, по которому этот файл в дальнейшем можно получить. есть у меня работающий фрагмент кода на Visual FoxPro, который может помочь с параметрами

Код: foxpro
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
      Procedure uploadfile(tcFileKMZ,tcFileName)
      * загрузка на файловый сервер, возвращает хеш файла
      Local lcKMZContent, oHTTPS, lcData, lcRes, CrLf, lcBoundary, lcBoundaryM, lcResText
      CrLf=Chr(13) + Chr(10)
      lcKMZContent=Filetostr(tcFileKMZ)
      lcBoundary='1BEF0A57BE110FD467A7T5F21F'
      lcBoundaryM='--'+lcBoundary
      oHTTPS = Newobject("MSXML2.XMLHTTP")
      oHTTPS.Open("POST",'http://share.abc.ru/file_am/upload_new_file',.F.)
      oHTTPS.SetRequestHeader("Content-Type", "multipart/form-data; boundary="+lcBoundary)
      oHTTPS.SetRequestHeader("Authorization","12345")
      oHTTPS.SetRequestHeader("User-Agent","Mozilla/1.0")
      lcData=CrLf+lcBoundaryM+CrLf
      lcData=lcData+'Content-Disposition: form-data; name="ID_TYPE"'+CrLf+CrLf+'41'+CrLf
      lcData=lcData+CrLf+lcBoundaryM+CrLf
      lcData=lcData+'Content-Disposition: form-data; name="fileToUpload"; filename="'+tcFileName+'"'+CrLf
      lcData=lcData+'Content-Type: application/octet-stream'+CrLf
      lcData=lcData+'Content-Transfer-Encoding: binary'+CrLf
      lcData=lcData+CrLf+lcKMZContent+CrLf+lcBoundaryM+'--'+CrLf
      lcData=Createbinary(lcData) --------> здесь по сути содержимое файла
      oHTTPS.Send(lcData)
      lcResText=oHTTPS.responseText
      If Left(lcResText,13)=='{"result":"1"'
            Return Strextract(lcResText,'"hash":"','","id_type"')
      Else
            Return ''
      Endif
      EndProc

я сделал так

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
procedure TMainForm.UniBitBtn2Click(Sender: TObject);
var
  ASource: TIdMultiPartFormDataStream;
  lcBoundary : string;
  ss: string;
begin
  ASource := TIdMultiPartFormDataStream.Create;
  ASource.AddFile('fileupload', UniServerModule.StartPath + 'files\tick.png', '');
  lcBoundary := '1BEF0A57BE110FD467A7T5F21F';
//---------------------------------------------------------------------------
// добавим атрибуты если надо
  ASource.AddFormField('ID_TYPE', '41');
  ASource.AddFormField('fileToUpload','tick.png');
//----------------------------------------------------------------------------
  IdHTTP1.HandleRedirects := true;
  IdHTTP1.Request.RawHeaders.AddValue('Content-Type','multipart/form-data; boundary=' + lcBoundary);
  IdHTTP1.Request.RawHeaders.AddValue('Authorization','12345');
  IdHTTP1.Request.RawHeaders.AddValue('User-Agent','Mozilla/1.0');

  IdHTTP1.Request.ContentType := 'application/octet-stream';
//  IdHTTP1.Request.RawHeaders.SaveToFile('c:\aaa.txt');
//  ss := IdHTTP1.Request.ContentEncoding;
//  IdHTTP1.Request.Referer := 'http://share.rtrn.ru/file_amt/upload_new_file';
  try
   UniMemo1.Text := IdHTTP1.Post('http://share.abc.ru/file_am/upload_new_file', ASource);
//    ShowMessage(IdHTTP1.Response.ResponseText);
   // ShowMessage(IdHTTP1.ResponseText);
  except
    on E:EIdHTTPProtocolException do
     ShowMessage(E.ErrorMessage);
  end;
  ASource.Free;
end;



но это не работает, вместо ожидаемого ID, возвращается страница с сайта по умолчанию, я что-то напутал с параметрами видимо, может кто подскажет в чем я не прав? заранее спасибо.
...
Рейтинг: 0 / 0
Загрузка файлов на сайт методом POST
    #39781509
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sniffer подскажет чем запрос твоей программы отличается от запроса работающей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка файлов на сайт методом POST
    #39781713
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по всему ошибка неявная
...
Рейтинг: 0 / 0
Загрузка файлов на сайт методом POST
    #39781909
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто всем лень разбираться в твоей портянке кода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка файлов на сайт методом POST
    #39781914
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставь к браузеру плагин HttpRequester и скорми ему свой POST.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка файлов на сайт методом POST
    #39781927
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я не ошибаюсь, то IdHTTP сам формирует boundary, не надо ему в этом помогать.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Загрузка файлов на сайт методом POST
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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