使用delphi rest api将文件上传到onedrive

时间:2016-05-04 07:31:21

标签: delphi onedrive

在使用delphi中的rest api将文件上传到onedrive时,访问令牌被添加到文本文件的内容中。如何从我上传的文本文件的内容中删除访问令牌。

我的观察。

1.如果我看到我在fiddler访问令牌中的请求被添加到内容的正文中(即使我在调用身份验证方法后清除了身体)

2.如果我把TRESTContentType作为ct_None,那么我可以看到reqest中有两个内容处理。一个是文件内容,另一个是访问令牌。

3.我甚至试图通过覆盖导致协议违规异常的内容长度值来删除额外内容。

4.如果我从请求中删除访问令牌,我将获得未经授权的访问(这很明显)

请帮帮我。 // _filename:='C:\ filename.txt';

  RClient := TRESTClient.Create('https://api.onedrive.com/v1.0'); 
  RClient .Authenticator :=OAuth2_OneDrive ;

  RESTRequest.Params.Clear;
  RESTRequest.ClearBody;
  RESTRequest.Method := TRestRequestMethod.rmPUT;
  RESTRequest.Resource:='/drive/items/root:/newFile.txt:/content';

  RESTRequest.Client:= RClient ;

  RESTRequest.AddAuthParameter('Authorization', 'Bearer ' + OAuth2_OneDrive.AccessToken, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);

  upload_stream := TFileStream.Create(_filename ,fmOpenRead);
  upload_stream.Position := 0;

  Size := upload_stream.Size- upload_stream.Position;
  SetLength(Buffer, Size);
  upload_stream.ReadBuffer(Pointer(Buffer)^, Size);

  Size := TEncoding.GetBufferEncoding(Buffer, Encoding);
  TextDocText := Encoding.GetString(Buffer, Size, Length(Buffer) - Size);

  RESTClient.Authenticator.Authenticate(RESTRequest);

  RESTRequest.ClearBody;

   RESTRequest.AddBody(TextDocText,TRESTContentType.ctTEXT_PLAIN);
   RESTRequest.Params.AddItem('Cache-Control', 'no-store, no-cache', TRESTRequestParameterKind.pkHTTPHEADER );


  RESTRequest.Execute;

0 个答案:

没有答案