【问题标题】:How to delete file/folder on Dropbox using REST or IdHTTP Firemonkey (Rad Studio 10 Seattle) – Android/iOS如何使用 REST 或 IdHTTP Firemonkey (Rad Studio 10 Seattle) 删除 Dropbox 上的文件/文件夹 – Android/iOS
【发布时间】:2017-04-18 11:11:42
【问题描述】:

我正在尝试删除 Dropbox 上的文件或文件夹。我已经尝试过 REST:

OAuth2Authenticator.AccessToken := Settings.DropBoxToken;
RESTRequest.Method := TRestRequestMethod.rmDelete;
RESTClient.BaseURL := 'https://api.dropboxapi.com/1/'
RESTRequest.Resource := '/MyFolder/File_test.txt';
RESTRequest.Execute;

我也尝试过使用 idHTTP:

IdHTTP.HandleRedirects := True;
IdHTTP.Request.BasicAuthentication := False;
IdHTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + Settings.DropBoxToken;
IdHTTP.Request.ContentType := 'application/json';

IdHTTP.Request.CustomHeaders.Values['root'] := 'dropbox';
IdHTTP.Request.CustomHeaders.Values['path'] := '/MyFolder/File_test.txt';

DropBoxURL = 'https://api.dropbox.com/1/fileops/delete';
IdHTTP.Delete(DropBoxURL);  //I have aslo tried   IdHTTP.Post(DropBoxURL, TStream(nil));

我得到了错误:

HTTP/1.1 400 错误请求或 HTTP/1.1 405 方法不允许

我可以毫无问题地上传和下载数据,但我不能删除文件。该解决方案必须适用于 Firemonkey (Rad Studio 10 Seattle) – Android/iOS。

希望有人能提供帮助。

谢谢。

【问题讨论】:

    标签: android ios dropbox firemonkey


    【解决方案1】:

    Dropbox API v1 只是 RESTish。它不是一个完全 RESTful API。这意味着某些 REST 模式不适用。例如,根据文档,API v1 /delete 端点需要一个 POST 方法:

    https://www.dropbox.com/developers-v1/core/docs#fileops-delete

    不过,您的 REST 版本使用 DELETE 方法。它似乎也缺少端点的/delete/ 部分。

    你的 idHTTP 版本也使用了Delete 方法,应该是Post。您提到您也尝试过,但似乎您遇到了不同的问题。请务必阅读完整的响应正文,因为它可能包含更有用的错误消息。

    另外,请注意 Dropbox API v1 已弃用:

    https://blogs.dropbox.com/developers/2016/06/api-v1-deprecated/

    您应该切换到 Dropbox API v2:

    https://www.dropbox.com/developers

    【讨论】:

      【解决方案2】:

      非常感谢您的帮助。

      我已调查响应正文并已成功删除 DropBox 上的文件。

      这是适用于 Windows 和 Android 的代码:

      DropBoxURL := 'https://api.dropbox.com/2/files/delete';
      
      IdHTTP1.HandleRedirects := True;
      IdHTTP1.Request.BasicAuthentication := False;
      IdHTTP1.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + Settings.DropBoxToken;
      IdHTTP1.Request.ContentType := 'application/json; charset=utf-8';
      
      JsonToSend := TStringStream.Create('{"path": "' + sSyncFolder + '"}', TEncoding.UTF8);
      Try
          Memo1.lines.add(IdHTTP1.Post(DropBoxURL, JsonToSend));
      except on e: EIdHTTPProtocolException do
      begin
          memo1.lines.add(idHTTP1.response.ResponseText);
          memo1.lines.add(e.ErrorMessage);
      end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        相关资源
        最近更新 更多