DataFlex
DataFlex
REST Upload Bandwidth Throttle
See more REST Examples
Demonstrates how to use upload bandwidth throttling with the REST API. This example will upload a file to Drobox using a file stream, with a limit on the bandwidth that can be used for the transfer.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vSocket
Handle hoSocket
Integer iMaxWaitMs
Handle hoRest
Handle hoJson
Variant vFileStream
Handle hoFileStream
String sResponseStr
Handle hoJsonResp
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.
// To use bandwidth throttling, the connection should be made using the socket API.
// This provides numerous properties to customize the connection, such as
// BandwidthThrottleDown, BandwidthThrottleUp, ClientIpAddress, ClintPort, Http Proxy,
// KeepAlive, PreferIpv6, RequireSslCertVerify, SoRcvBuf, SoSndBuf, SoReuseAddr,
// SOCKS proxy, TcpNoSDelay, TlsPinSet, TlsCipherSuite, SslAllowedCiphers, etc.
Get Create (RefClass(cComChilkatSocket)) To hoSocket
If (Not(IsComObjectCreated(hoSocket))) Begin
Send CreateComObject of hoSocket
End
Move 5000 To iMaxWaitMs
Get ComConnect Of hoSocket "content.dropboxapi.com" 443 True iMaxWaitMs To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoSocket To sTemp1
Showln sTemp1
Get ComConnectFailReason Of hoSocket To iTemp1
Showln "Connect Fail Reason: " iTemp1
Procedure_Return
End
// Set the upload bandwidth throttle rate to 50000 bytes per second.
Set ComBandwidthThrottleUp Of hoSocket To 50000
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
// Tell the REST object to use the connected socket.
Get pvComObject of hoSocket to vSocket
Get ComUseConnection Of hoRest vSocket True To iSuccess
// The remainder of this example is identical to the example at:
// Dropbox File Stream Upload.
// Add request headers.
Get ComAddHeader Of hoRest "Content-Type" "application/octet-stream" To iSuccess
Get ComAddHeader Of hoRest "Authorization" "Bearer DROPBOX_ACCESS_TOKEN" To iSuccess
// The upload "parameters" contained in JSON passed in an HTTP request header.
// This is the JSON to be added in this example:
// {
// "path": "/Homework/lit/hamlet.xml",
// "mode": "add",
// "autorename": true,
// "mute": false
// }
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 ComAppendString Of hoJson "mode" "add" To iSuccess
Get ComAppendBool Of hoJson "autorename" True To iSuccess
Get ComAppendBool Of hoJson "mute" False To iSuccess
Get ComEmit Of hoJson To sTemp1
Get ComAddHeader Of hoRest "Dropbox-API-Arg" sTemp1 To iSuccess
// Almost ready to go...
// Let's setup a file stream to point to a file.
Get Create (RefClass(cComChilkatStream)) To hoFileStream
If (Not(IsComObjectCreated(hoFileStream))) Begin
Send CreateComObject of hoFileStream
End
Set ComSourceFile Of hoFileStream To "qa_data/xml/hamlet.xml"
// Do the upload. The URL is https://content.dropboxapi.com/2/files/upload.
// We already connected to content.dropboxapi.com using TLS (i.e. HTTPS),
// so now we only need to specify the path "/2/files/upload".
// Note: The file is streamed directly from disk. (The entire
// file will not be loaded into memory.)
Get pvComObject of hoFileStream to vFileStream
Get ComFullRequestStream Of hoRest "POST" "/2/files/upload" vFileStream 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
// The response is JSON.
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonResp
If (Not(IsComObjectCreated(hoJsonResp))) Begin
Send CreateComObject of hoJsonResp
End
Set ComEmitCompact Of hoJsonResp To False
Get ComLoad Of hoJsonResp sResponseStr To iSuccess
// Show the JSON response.
Get ComEmit Of hoJsonResp To sTemp1
Showln sTemp1
// Returns JSON that 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
// }
// Sample code to get data from the JSON response:
Get ComIntOf Of hoJsonResp "size" To iSize
Showln "size = " iSize
Get ComStringOf Of hoJsonResp "rev" To sRev
Showln "rev = " sRev
Get ComStringOf Of hoJsonResp "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