Загрузка растрового изображения с помощью idHTTP из мультимедийного приложения Delphi 10.3 - PullRequest
0 голосов
/ 28 февраля 2019

Я прочитал много похожих сообщений об отправке данных с помощью idHTTP, но все же не могу справиться.Я использую этот код:

обновлено

procedure TTabbedForm.SpeedButton1Click(Sender: TObject);
var
    fName       : string;
     mStream : TMemoryStream;
begin
    fName := 'image.jpg';
    mStream := TMemoryStream.Create;
    myImage.Bitmap.SaveToStream(mStream);
    mStream.Position := 0;
    try
            IdHTTP1.Request.ContentType := 'application/octet-stream';
            IdHTTP1.PUT('http://www.example.com/'+fName, mStream);
    finally
            mStream.free;
    end;
end;

, но я получаю сообщение об ошибке "Метод не разрешен".Что я делаю не так, пожалуйста?

1 Ответ

0 голосов
/ 01 марта 2019

Для загрузки на Google Drive требуются некоторые дополнительные шаги.Например, запрос HTTP POST должен содержать токен авторизации , который, в свою очередь, предоставляется вам только после аутентификации (войдите в систему с учетной записью Google).Для Google Диска вы также должны использовать безопасные соединения (https), для которых требуются библиотеки SSL, такие как OpenSSL.

Пример из документов API:

POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media HTTP/1.1
Content-Type: image/jpeg
Content-Length: [NUMBER_OF_BYTES_IN_FILE]
Authorization: Bearer [YOUR_AUTH_TOKEN]

[JPEG_DATA]

Файл простойAPI загрузки для Google Drive задокументирован здесь:

https://developers.google.com/drive/api/v3/simple-upload


Обновление

Попробуйте в этом примере требуется действительный токен авторизации:

procedure TDriveAPITest.Run;
var
  PostData: TStream;
  Response: string;
begin
  PostData := TFileStream.Create('test.png', fmOpenRead or fmShareDenyWrite);
  try
    IdHTTP := TIdHTTP.Create;
    try
      IdHTTP.HTTPOptions := IdHTTP.HTTPOptions + [hoNoProtocolErrorException];
      IdHTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer [YOUR_AUTH_TOKEN]';

      Response := IdHTTP.Post('https://www.googleapis.com/upload/drive/v3/files?uploadType=media', PostData);

      if IdHTTP.ResponseCode = 200 then begin
        WriteLn('Response: ' + Response);
      end else begin
        WriteLn('Error: ' + IdHTTP.ResponseText);
      end;
    finally
      IdHTTP.Free;
    end;
  finally
    PostData.Free;
  end;
end; 

Вывод:

Error: HTTP/1.0 401 Unauthorized
...