DataFlex
DataFlex
Download File from Dropbox (Streaming)
See more Dropbox Examples
Downloads a file from Dropbox, streaming it directly to a file in the filesystem.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoRest
Handle hoJson
Variant vFileStream
Handle hoFileStream
Integer iExpectedStatus
String sResponseStr
String sApiResult
Handle hoJsonResult
Integer iSize
String sRev
String sClientModified
Handle hoCkdt
Boolean iBLocalTime
Variant vDt
Handle hoDt
String sTemp1
Integer iTemp1
Integer iTemp2
Integer iTemp3
Integer iTemp4
Integer iTemp5
Boolean bTemp1
Move False To iSuccess
// 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.
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
// Connect to Dropbox
Get ComConnect Of hoRest "content.dropboxapi.com" 443 True True To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// Add request headers.
Get ComAddHeader Of hoRest "Authorization" "Bearer DROPBOX_ACCESS_TOKEN" To iSuccess
// 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",
// }
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get ComAppendString Of hoJson "path" "/Homework/lit/hamlet.xml" To iSuccess
Get ComEmit Of hoJson To sTemp1
Get ComAddHeader Of hoRest "Dropbox-API-Arg" sTemp1 To iSuccess
// Setup a file stream for the download
Get Create (RefClass(cComChilkatStream)) To hoFileStream
If (Not(IsComObjectCreated(hoFileStream))) Begin
Send CreateComObject of hoFileStream
End
Set ComSinkFile Of hoFileStream To "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.
Move 200 To iExpectedStatus
Get pvComObject of hoFileStream to vFileStream
Get ComSetResponseBodyStream Of hoRest iExpectedStatus True vFileStream To iSuccess
Get ComFullRequestNoBody Of hoRest "POST" "/2/files/download" To sResponseStr
Get ComLastMethodSuccess Of hoRest To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// When successful, Dropbox responds with a 200 response code.
Get ComResponseStatusCode Of hoRest To iTemp1
If (iTemp1 <> 200) Begin
// Examine the request/response to see what happened.
Get ComResponseStatusCode Of hoRest To iTemp1
Showln "response status code = " iTemp1
Get ComResponseStatusText Of hoRest To sTemp1
Showln "response status text = " sTemp1
Get ComResponseHeader Of hoRest To sTemp1
Showln "response header: " sTemp1
Showln "response body (if any): " sResponseStr
Showln "---"
Get ComLastRequestStartLine Of hoRest To sTemp1
Showln "LastRequestStartLine: " sTemp1
Get ComLastRequestHeader Of hoRest To sTemp1
Showln "LastRequestHeader: " sTemp1
Procedure_Return
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:
Get ComResponseHdrByName Of hoRest "dropbox-api-result" To sApiResult
Showln sApiResult
// 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...
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonResult
If (Not(IsComObjectCreated(hoJsonResult))) Begin
Send CreateComObject of hoJsonResult
End
Set ComEmitCompact Of hoJsonResult To False
Get ComLoad Of hoJsonResult sApiResult To iSuccess
// Show the JSON pretty-printed...
Get ComEmit Of hoJsonResult To sTemp1
Showln sTemp1
// Sample code to get data from the JSON response:
Get ComIntOf Of hoJsonResult "size" To iSize
Showln "size = " iSize
Get ComStringOf Of hoJsonResult "rev" To sRev
Showln "rev = " sRev
Get ComStringOf Of hoJsonResult "client_modified" To sClientModified
Get Create (RefClass(cComCkDateTime)) To hoCkdt
If (Not(IsComObjectCreated(hoCkdt))) Begin
Send CreateComObject of hoCkdt
End
Get ComSetFromTimestamp Of hoCkdt sClientModified To iSuccess
Move True To iBLocalTime
Get Create (RefClass(cComChilkatDtObj)) To hoDt
If (Not(IsComObjectCreated(hoDt))) Begin
Send CreateComObject of hoDt
End
Get pvComObject of hoDt to vDt
Send ComToDtObj To hoCkdt iBLocalTime vDt
Get ComDay Of hoDt To iTemp1
Get ComMonth Of hoDt To iTemp2
Get ComYear Of hoDt To iTemp3
Get ComHour Of hoDt To iTemp4
Get ComMinute Of hoDt To iTemp5
Showln iTemp1 "/" iTemp2 "/" iTemp3 " " iTemp4 ":" iTemp5
End_Procedure