Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Загрузка файлов на сайт методом POST / 6 сообщений из 6, страница 1 из 1
03.03.2019, 14:36
    #39781506
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файлов на сайт методом POST
Добрый день. Есть у меня потребность реализовать алгоритм по теме, скажу сразу, что в данной теме я новичок. Есть у нас с компании ресурс, на котором работает 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
03.03.2019, 14:39
    #39781509
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файлов на сайт методом POST
Sniffer подскажет чем запрос твоей программы отличается от запроса работающей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.03.2019, 09:09
    #39781713
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файлов на сайт методом POST
Судя по всему ошибка неявная
...
Рейтинг: 0 / 0
04.03.2019, 13:44
    #39781909
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файлов на сайт методом POST
Просто всем лень разбираться в твоей портянке кода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.03.2019, 13:49
    #39781914
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файлов на сайт методом POST
поставь к браузеру плагин HttpRequester и скорми ему свой POST.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.03.2019, 13:57
    #39781927
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файлов на сайт методом POST
Если я не ошибаюсь, то IdHTTP сам формирует boundary, не надо ему в этом помогать.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Загрузка файлов на сайт методом POST / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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