Sample code for 30+ languages & platforms
Lua

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 Lua Downloads

Lua
local chilkat = require("chilkat")

-- 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.

local socket = chilkat.Socket.new()
local maxWaitMs = 5000
local success = socket:connect("content.dropboxapi.com", 443, true, maxWaitMs)
if not success then
    print(socket.last_error_text)
    print("Connect Fail Reason: " .. socket.connect_fail_reason)
    return
end

-- Set the upload bandwidth throttle rate to 50000 bytes per second.
socket.bandwidth_throttle_up = 50000

local rest = chilkat.Rest.new()

-- Tell the REST object to use the connected socket.
rest:use_connection(socket, true)

-- The remainder of this example is identical to the example at:
-- Dropbox File Stream Upload.

-- Add request headers.
rest:add_header("Content-Type", "application/octet-stream")
rest:add_header("Authorization", "Bearer DROPBOX_ACCESS_TOKEN")

-- 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
-- }

local json = chilkat.JsonObject.new()
json:append_string("path", "/Homework/lit/hamlet.xml")
json:append_string("mode", "add")
json:append_bool("autorename", true)
json:append_bool("mute", false)
rest:add_header("Dropbox-API-Arg", json:emit())

-- Almost ready to go...
-- Let's setup a file stream to point to a file.
local fileStream = chilkat.Stream.new()
fileStream.source_file = "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.)
local responseStr = rest:full_request_stream("POST", "/2/files/upload", fileStream)
if not rest.last_method_success then
    print(rest.last_error_text)
    return
end

-- When successful, Dropbox responds with a 200 response code.
if rest.response_status_code ~= 200 then
    -- Examine the request/response to see what happened.
    print("response status code = " .. rest.response_status_code)
    print("response status text = " .. rest.response_status_text)
    print("response header: " .. rest.response_header)
    print("response body (if any): " .. responseStr)
    print("---")
    print("LastRequestStartLine: " .. rest.last_request_start_line)
    print("LastRequestHeader: " .. rest.last_request_header)
    return
end

-- The response is JSON.
local jsonResp = chilkat.JsonObject.new()
jsonResp.emit_compact = false
jsonResp:load(responseStr)

-- Show the JSON response.
print(jsonResp:emit())

-- 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:
local size = jsonResp:int_of("size")
print("size = " .. size)

local rev = jsonResp:string_of("rev")
print("rev = " .. rev)

local clientModified = jsonResp:string_of("client_modified")
local ckdt = chilkat.DateTime.new()
ckdt:set_from_timestamp(clientModified)
local bLocalTime = true
local dt = chilkat.DtObj.new()
ckdt:to_dt_obj(bLocalTime, dt)

print(dt.day .. "/" .. dt.month .. "/" .. dt.year .. " " .. dt.hour .. ":" .. dt.minute)