Sample code for 30+ languages & platforms
Delphi DLL

Download File from Dropbox (Streaming)

See more Dropbox Examples

Downloads a file from Dropbox, streaming it directly to a file in the filesystem.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, CkDateTime, Rest, DtObj, JsonObject, Stream;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
rest: HCkRest;
json: HCkJsonObject;
fileStream: HCkStream;
expectedStatus: Integer;
responseStr: PWideChar;
apiResult: PWideChar;
jsonResult: HCkJsonObject;
size: Integer;
rev: PWideChar;
clientModified: PWideChar;
ckdt: HCkDateTime;
bLocalTime: Boolean;
dt: HCkDtObj;

begin
success := False;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

// A Dropbox access token should have been previously obtained.
// Dropbox access tokens do not expire.
// See Dropbox Access Token.

rest := CkRest_Create();

// Connect to Dropbox
success := CkRest_Connect(rest,'content.dropboxapi.com',443,True,True);
if (success = False) then
  begin
    Memo1.Lines.Add(CkRest__lastErrorText(rest));
    Exit;
  end;

// Add request headers.
CkRest_AddHeader(rest,'Authorization','Bearer DROPBOX_ACCESS_TOKEN');

// The download "parameters" are contained in JSON passed in an HTTP request header.
// This is the JSON indicating the file to be downloaded:
// { 
//    "path": "/Homework/lit/hamlet.xml",
// }

json := CkJsonObject_Create();
CkJsonObject_AppendString(json,'path','/Homework/lit/hamlet.xml');
CkRest_AddHeader(rest,'Dropbox-API-Arg',CkJsonObject__emit(json));

// Setup a file stream for the download
fileStream := CkStream_Create();
CkStream_putSinkFile(fileStream,'qa_output/hamletFromDropbox.xml');

// Indicate that the call to FullRequestNoBody should send the response body
// to fileStream if the response status code is 200.
// If a non-success response status code is received, then nothing
// is streamed to the output file and the error response is returned by FullRequestNoBody.
expectedStatus := 200;
CkRest_SetResponseBodyStream(rest,expectedStatus,True,fileStream);

responseStr := CkRest__fullRequestNoBody(rest,'POST','/2/files/download');
if (CkRest_getLastMethodSuccess(rest) = False) then
  begin
    Memo1.Lines.Add(CkRest__lastErrorText(rest));
    Exit;
  end;

// When successful, Dropbox responds with a 200 response code.
if (CkRest_getResponseStatusCode(rest) <> 200) then
  begin
    // Examine the request/response to see what happened.
    Memo1.Lines.Add('response status code = ' + IntToStr(CkRest_getResponseStatusCode(rest)));
    Memo1.Lines.Add('response status text = ' + CkRest__responseStatusText(rest));
    Memo1.Lines.Add('response header: ' + CkRest__responseHeader(rest));
    Memo1.Lines.Add('response body (if any): ' + responseStr);
    Memo1.Lines.Add('---');
    Memo1.Lines.Add('LastRequestStartLine: ' + CkRest__lastRequestStartLine(rest));
    Memo1.Lines.Add('LastRequestHeader: ' + CkRest__lastRequestHeader(rest));
    Exit;
  end;

// Information about the downloaded file is also available as JSON in a response header.
// The "dropbox-api-result" response header contains the information.  For example:
apiResult := CkRest__responseHdrByName(rest,'dropbox-api-result');
Memo1.Lines.Add(apiResult);

// In this case, the pretty-formatted dropbox-api-result JSON looks like this:
// { 
//   "name": "hamlet.xml",
//   "path_lower": "/homework/lit/hamlet.xml",
//   "path_display": "/Homework/lit/hamlet.xml",
//   "id": "id:74FkdeNuyKAAAAAAAAAAAQ",
//   "client_modified": "2016-06-02T23:19:00Z",
//   "server_modified": "2016-06-02T23:19:00Z",
//   "rev": "9482db15f",
//   "size": 279658
// }

// Load the JSON, pretty-print it, and demonstrate how to get some values...
jsonResult := CkJsonObject_Create();
CkJsonObject_putEmitCompact(jsonResult,False);
CkJsonObject_Load(jsonResult,apiResult);
// Show the JSON pretty-printed...
Memo1.Lines.Add(CkJsonObject__emit(jsonResult));

// Sample code to get data from the JSON response:
size := CkJsonObject_IntOf(jsonResult,'size');
Memo1.Lines.Add('size = ' + IntToStr(size));

rev := CkJsonObject__stringOf(jsonResult,'rev');
Memo1.Lines.Add('rev = ' + rev);

clientModified := CkJsonObject__stringOf(jsonResult,'client_modified');
ckdt := CkDateTime_Create();
CkDateTime_SetFromTimestamp(ckdt,clientModified);
bLocalTime := True;
dt := CkDtObj_Create();
CkDateTime_ToDtObj(ckdt,bLocalTime,dt);

Memo1.Lines.Add(IntToStr(CkDtObj_getDay(dt)) + '/' + IntToStr(CkDtObj_getMonth(dt)) + '/' + IntToStr(CkDtObj_getYear(dt)) + ' '
     + IntToStr(CkDtObj_getHour(dt)) + ':' + IntToStr(CkDtObj_getMinute(dt)));

CkRest_Dispose(rest);
CkJsonObject_Dispose(json);
CkStream_Dispose(fileStream);
CkJsonObject_Dispose(jsonResult);
CkDateTime_Dispose(ckdt);
CkDtObj_Dispose(dt);

end;