Rust
Rust
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 Rust Downloads
// 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.
let socket = chilkat::Socket::new();
let max_wait_ms = 5000;
if socket.connect("content.dropboxapi.com", 443, true, max_wait_ms).is_err() {
println!("{}", socket.last_error_text());
println!("Connect Fail Reason: {}", socket.connect_fail_reason());
return;
}
// Set the upload bandwidth throttle rate to 50000 bytes per second.
socket.set_bandwidth_throttle_up(50000);
let rest = chilkat::Rest::new();
// Tell the REST object to use the connected socket.
let _ = rest.use_connection(&socket, true);
// The remainder of this example is identical to the example at:
// Dropbox File Stream Upload.
// Add request headers.
let _ = rest.add_header("Content-Type", "application/octet-stream");
let _ = 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
// }
let json = chilkat::JsonObject::new();
let _ = json.append_string("path", "/Homework/lit/hamlet.xml");
let _ = json.append_string("mode", "add");
let _ = json.append_bool("autorename", true);
let _ = json.append_bool("mute", false);
let _ = rest.add_header("Dropbox-API-Arg", &json.emit().unwrap_or_default());
// Almost ready to go...
// Let's setup a file stream to point to a file.
let file_stream = chilkat::Stream::new();
file_stream.set_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.)
let Ok(response_str) = rest.full_request_stream("POST", "/2/files/upload", &file_stream) else {
println!("{}", rest.last_error_text());
return;
};
// When successful, Dropbox responds with a 200 response code.
if rest.response_status_code() != 200 {
// Examine the request/response to see what happened.
println!("response status code = {}", rest.response_status_code());
println!("response status text = {}", rest.response_status_text());
println!("response header: {}", rest.response_header());
println!("response body (if any): {}", response_str);
println!("---");
println!("LastRequestStartLine: {}", rest.last_request_start_line());
println!("LastRequestHeader: {}", rest.last_request_header());
return;
}
// The response is JSON.
let json_resp = chilkat::JsonObject::new();
json_resp.set_emit_compact(false);
let _ = json_resp.load(&response_str);
// Show the JSON response.
println!("{}", json_resp.emit().unwrap_or_default());
// 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:
let size = json_resp.int_of("size");
println!("size = {}", size);
let rev = json_resp.string_of("rev").unwrap_or_default();
println!("rev = {}", rev);
let client_modified = json_resp.string_of("client_modified").unwrap_or_default();
let ckdt = chilkat::DateTime::new();
let _ = ckdt.set_from_timestamp(&client_modified);
let b_local_time = true;
let dt = chilkat::DtObj::new();
ckdt.to_dt_obj(b_local_time, &dt);
println!("{}/{}/{} {}:{}", dt.day(), dt.month(), dt.year(), dt.hour(), dt.minute());