Skip to content

TrimbleCloud.DataOcean3

Data Ocean SDK for .NET provides an interface for interacting with the Data Ocean service. It is a wrapper around the Data Ocean API.

Getting Started

Installation

This SDK is available as a NuGet package from Trimble Artifactory. To install, use the following command:

Terminal window
dotnet add package trimblecloud.dataocean3

Data Ocean Endpoints

EnvironmentBase URL Endpoint
Stagehttps://cloud.stage.api.trimblecloud.com/dataocean/api/3.0
Productionhttps://cloud.api.trimble.com/dataocean/api/3.0

Create a DataOcean client

Configure a client using static model

using Trimble.ID;
using TrimbleCloud.DataOcean3;
var client = new DataOceanClient(new BearerTokenHttpClientProvider(tokenProvider, new Uri("https://cloud.stage.api.trimblecloud.com/dataocean/api/3.0"));
var files = await client.Files.GetFilesList().GetItems();

Configure a client using service provider model

using Trimble.ID;
using TrimbleCloud.DataOcean3;
// Setup
const TOKEN = "...";
const BASE_URL = "https://cloud.stage.api.trimblecloud.com/dataocean/api/3.0";
var tokenProvider = new FixedTokenProvider(TOKEN);
services.AddDataOcean(tokenProvider, BASE_URL);
// Usage
public class UseDataOcean(IDirectoriesAPI directoriesAPI, IFilesAPI filesAPI)
{
private IDirectoriesAPI _directoriesAPI;
public UseDataOcean(IDirectoriesAPI directoriesAPI, IFilesAPI filesAPI)
{
_directoriesAPI = directoriesAPI;
_filesAPI = filesAPI;
}
public async Task DoWork()
{
var directories = await _directoriesAPI.GetDirectoriesList().GetItems();
var files = await _directoriesAPI.GetFilesList().GetItems();
var file = await _filesAPI.Create(new File() { ... });
using (var stream = File.OpenRead("helloworld.txt"))
{
await _filesAPI.Upload(file.id, stream);
}
}
}
</code>

Get Started with Directories

Get a list of directories by parent directory ID

The following example shows how to get a list of directories.

var directories = await client.Directories.GetDirectoriesList(<directory-uuid>).GetItems();

Get a list of directories by path

The following example shows how to get a list of directories.

var directories = await client.Directories.GetDirectoriesList("/path/to/directory").GetItems();

Get a list of files in directory by ID

The following example shows how to get a list of files in directory.

var files = await client.Directories.GetFilesList(parentId: <id>, urlDuration: urlDuration).GetItems();

urlDuration in TimeSpan format specifices the duration of time for which the file download URL for each file will be valid can be specified in days(d), hours(h) or minutes(m). Minimum value 5m, maximum value 30d. Default value 1h.

Get a list of files in directory by path

The following example shows how to get a list of files in directory.

var files = await client.Directories.GetFilesList(path: "/path/to/directory", urlDuration: urlDuration).GetItems();

urlDuration in TimeSpan format specifices the duration of time for which the file download URL for each file will be valid can be specified in days(d), hours(h) or minutes(m). Minimum value 5m, maximum value 30d. Default value 1h.

Get a directory by ID

The following example shows how to get a directory by ID.

var directory = await client.Directories.Read(id: directoryId);

Get a directory by path

The following example shows how to get a directory by path.

var directory = await client.Directories.Read(path: "/path/to/directory");

Create a directory

The following example shows how to create a directory.

var directory = await client.Directories.Create(new DirectoryCreate() { Path = "/path/to/directory", Metadata = new Dictionary<string, string>() { { "key", "value" } } });

Create a directory with ACL permissions

The following example shows how to create a directory with ACL permissions.

var directory = await client.Directories.Create(new DirectoryCreate() {
Path = "/path/to/directory",
Acl = new Dictionary<AclIdentity, AclPermission>()
{
{ new AclApplicationIdentity(Guid.Parse("baee4a31-e307-42c2-aa8d-b7f400ba3f4e")), AclPermission.ReadOnly
}
}});

Update a directory

The following example shows how to update a directory.

var directory = await client.Directories.Update(directoryId, new DirectoryUpdate() { Metadata = new Dictionary<string, string>() { { "key", "value" } } });

Update a directory by path

The following example shows how to update a directory by path.

var directory = await client.Directories.Update("/path/to/directory", new DirectoryUpdate() { Metadata = new Dictionary<string, string>() { { "key", "value" } } });

Delete a directory

The following example shows how to delete an empty directory.

await client.Directories.Delete(directoryId);

NOTE: If the directory is not empty, the delete operation will fail. To delete a non-empty directory, use the DeleteRecursively(Guid id) method.

Delete a directory by path

The following example shows how to delete an empty directory by path.

await client.Directories.Delete("/path/to/directory");

NOTE: If the directory is not empty, the delete operation will fail. To delete a non-empty directory, use the DeleteRecursively(string path) method.

Recursively delete a directory

The following example shows how to recursively delete a directory.

var job = await client.Directories.DeleteRecursively(directoryId);

Recursively delete a directory by path

The following example shows how to recursively delete a directory by path.

var job = await client.Directories.DeleteRecursively("/path/to/directory");

Copy a directory

The following example shows how to copy a directory.

var job = await client.Directories.Copy(directoryId, new DirectoryCreate() { Path = "/path/to/directory" });

Copy a directory by path

The following example shows how to copy a directory by path.

var job = await client.Directories.Copy("/path/to/directory", new DirectoryCreate() { Path = "/path/to/directory" });

Get Started with Files

Create a file

Create a new File object. This step is required before you are able to push file data into the service. If any of the directories provided in the path do not exist, they are automatically created. If the File already exists, a new version is created instead. If expires_at is explicitly supplied for a new version then all versions of that File will inherit the latest expires_at value.

The following example shows how to create a file.

var file = await client.Files.Create(new FileCreate()
{
Path = "/path/to/directory/helloworld.txt",
RestrictedAccess = true,
Metadata = new Dictionary<string, string>()
{
{ "key", "value" }
},
MultiPart = true,
Acl = new Dictionary<AclIdentity, AclPermission>()
{
{ new AclApplicationIdentity(Guid.Parse("baee4a31-e307-42c2-aa8d-b7f400ba3f4e")), AclPermission.ReadOnly }
},
Region = new [] { "us1" }
});

FileCreate parameters:

ParameterDescription
PathThe full path to the file. If the file already exists, a new version is created instead.
RestrictedAccessTrue if the download link for the file should only be valid for a limited time. If false, the download link will be valid forever. Note that changing restricted_access to true later will not invalidate these links. Restricted download links will expire after some amount of time, currently 24 hours, after which clients must query Data Ocean to receive a newly signed link. Default: true
MetadataA dictionary of key-value pairs to associate with the file.
MultiPartTrue if the file is a multipart upload.
AclA dictionary of AclIdentity and AclPermission pairs to associate with the file.
RegionA list of regions to associate with the file.
MasterIdUse to create support files. References associated master file.
ExpiresAtThe time at which the file will expire. If not specified, the file will never expire.
PathTemplateA template that describes how clients can access files in a fileset. For example, if files in an archive are organized into folders by country and named after the city, the PathTemplate could be set to {country}/{city}.kml. Clients can only specify this if fileset is true. Note that the PathTemplate is only provided to the user as a reminder of the original archive’s contents’ organization. Data Ocean doesn’t enforce or check that the archive contents match the path_template.
FilesetWhether the object consists of a set of multiple files that should be treated as a single file, such as with shape files.

Get a file by ID

The following example shows how to get a file by ID.

var file = await client.Files.Read(id:fileId,version: fileVersion, region: region, urlDuration: urlDuration);

urlDuration in TimeSpan format specifices the duration of time for which the file download URL for each file will be valid can be specified in days(d), hours(h) or minutes(m). Minimum value 5m, maximum value 30d. Default value 1h.

Get a file by path

The following example shows how to get a file by path.

var file = await client.Files.Read(path:"/path/to/directory/helloworld.txt", version: fileVersion, region: region, urlDuration: urlDuration);

urlDuration in TimeSpan format specifices the duration of time for which the file download URL for each file will be valid can be specified in days(d), hours(h) or minutes(m). Minimum value 5m, maximum value 30d. Default value 1h.

Update a file

The following example shows how to update a file.

var file = await client.Files.Update(fileId, new FileUpdate() { Metadata = new Dictionary<string, string>() { { "key", "value" } } });

Update a file by path

The following example shows how to update a file by path.

var file = await client.Files.Update("/path/to/directory/helloworld.txt", new FileUpdate() { Metadata = new Dictionary<string, string>() { { "key", "value" } } });

Delete a file

The following example shows how to delete a file.

await client.Files.Delete(fileId);

Delete a file by path

The following example shows how to delete a file by path.

await client.Files.Delete("/path/to/directory/helloworld.txt");

Upload a file

Upload a file to an existing file object. if multiPart is set to true, the file will be uploaded in parts and it is handled by the SDK.

The following example shows how to upload a file.

using (var stream = File.OpenRead("helloworld.txt"))
{
await client.Files.Upload(fileId, stream, version: fileVersion, concurrentRequests: concurrentRequests);
}
ParameterDescription
concurrentRequestsThe number of concurrent requests to use when uploading the file. Default: 8.
versionThe version of the file to upload to. If not specified, the latest version is used.
streamThe stream to upload.
idThe ID of the file to upload to.

Upload a file by path

Upload a file to an existing file object. if multiPart is set to true, the file will be uploaded in parts and it is handled by the SDK.

The following example shows how to upload a file.

using (var stream = File.OpenRead("helloworld.txt"))
{
await client.Files.Upload("/path/to/directory/helloworld.txt", stream, version: fileVersion, concurrentRequests: concurrentRequests);
}
ParameterDescription
concurrentRequestsThe number of concurrent requests to use when uploading the file. Default: 8.
versionThe version of the file to upload to. If not specified, the latest version is used.
streamThe stream to upload.
pathThe path of the file to upload to.

Download a file

Download a file from an existing file object.

The following example shows how to download a file.

using (var stream = File.OpenWrite("helloworld.txt"))
{
await client.Files.Download(id: fileId, stream: stream, version: fileVersion, region: region, concurrentRequests: concurrentRequests);
}
ParameterDescription
concurrentRequestsThe number of concurrent requests to use when downloading the file. Default: 8.
versionThe version of the file to download. If not specified, the latest version is used.
streamThe stream to download to.
idThe ID of the file to download.
regionThe region of the file to download.

Download a file by path

Download a file from an existing file object.

The following example shows how to download a file.

using (var stream = File.OpenWrite("helloworld.txt"))
{
await client.Files.Download(path: "/path/to/directory/helloworld.txt", stream: stream, version: fileVersion, region: region, concurrentRequests: concurrentRequests);
}
ParameterDescription
concurrentRequestsThe number of concurrent requests to use when downloading the file. Default: 8.
versionThe version of the file to download. If not specified, the latest version is used.
streamThe stream to download to.
pathThe path of the file to download.
regionThe region of the file to download.

List files in a fileset

List all files in a fileset. This is only valid for filesets.

The following example shows how to list files in a fileset.

var files = await client.Files.GetFilesetManifest(id: fileId, version: fileVersion).GetItems();

List files in a fileset by path

List all files in a fileset. This is only valid for filesets.

The following example shows how to list files in a fileset.

var files = await client.Files.GetFilesetManifest(path: "/path/to/directory/helloworld.txt", version: fileVersion).GetItems();

Request scan

Enqueue a file to be scanned for malware.

The following example shows how to request scan.

var file = await client.Files.RequestScan(fileId);

Request scan by path

Enqueue a file to be scanned for malware.

The following example shows how to request scan.

var file = await client.Files.RequestScan("/path/to/directory/helloworld.txt");

Get File Versions

Get a list of all versions of a file.

The following example shows how to get file versions.

var files = await client.Files.GetFileVersions(id: fileId).GetItems();

Get File Versions by path

Get a list of all versions of a file.

The following example shows how to get file versions.

var files = await client.Files.GetFileVersions(path: "/path/to/directory/helloworld.txt").GetItems();

Samples

Find complete samples here