Uploading a File to a File Server
This section describes how to use the Sentinel EMS API with ESD as a Service (ESDaaS) to upload a file to a file server and access it.
The GET /ems/api/v5/stsToken
endpoint generates an STS token that is used for securely uploading a file to a file server. The STS token is a set of temporary security credentials that you can use to authenticate the user who is uploading the file. An STS token is valid for 30 minutes.
A sample response of this endpoint is shown below:
{ "SecretAccessKey": "Ts8HO/nndTkKezUuLGdqFvYv2U9uIT+QAF0uuzYa", "apiRegion": "eu-west-1", "s3Region": "eu-west-1", "bucketName": "sentinel-esd-qa-e2", "domainAlias": "qa-e2.test.sentinelcloud.com", "AccessKeyId": "ASIAXF67OJWZF347H7XU", "SessionToken": "FwoGZXIvYXdzEMH//////////wEaDGP5uaXPGi9SWuP85iKBAUbJv6wDtBFrJWsgdPGNo+6V6SlWcSEQWBvo7r1Qsh/oW4VT5AzQd3w==" }
Sample Java Program
The following Java program securely uploads a file to an S3 Bucket using the STS token generated by the GET /ems/api/v5/stsToken
endpoint. You can customize the program according to your requirements.
You must update the sections highlighted in bold, as explained in the section Uploading a File.
import java.io.File; import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.model.PutObjectResponse; public class UploadFileToS3Example { private static String bucketName = "sentinel-esd-qa-e2"; private static String keyName = "download-identifier/test-file.txt"; private static String uploadFileName = "c:\\test-file.txt"; private static String accessKeyId = "ASIAXF67OJWZF347H7XU"; private static String secretAccessKey = "Ts8HO/nndTkKezUuLGdqFvYv2U9uIT+QAF0uuzYa"; private static String sessionToken = "FwoGZXIvYXdzEMH//////////wEaDGP5uaXPGi9SWuP85iKBAU+6V6SlWcSEQWBvo7r1Qsh/oW4VT5AzQd3w=="; private static String domainAlias = "qa-e2.test.sentinelcloud.com"; private static String s3Region = "eu-west-1"; public static void main(String[] args) { // Creating AWS Session Credentials to get access to the s3 bucket AwsSessionCredentials awsCreds = AwsSessionCredentials.create(accessKeyId, secretAccessKey, sessionToken); // Fetching the s3 bucket region object Region region = null; for (Region regionObj : Region.regions()) { if (regionObj.toString().equalsIgnoreCase(s3Region.toLowerCase())) { region = regionObj; } } // Creating the s3Client object S3Client s3 = S3Client.builder().region(region).credentialsProvider(StaticCredentialsProvider.create(awsCreds)) .build(); // Creating a PutObjectRequest PutObjectRequest objectRequest = PutObjectRequest.builder().bucket(bucketName).key(keyName).build(); try { // Reading the file to be uploaded File file = new File(uploadFileName); // Passing the file you want to upload PutObjectResponse putObjectResponse = s3.putObject(objectRequest, RequestBody.fromFile(file)); // File Download Base URL String downloadFileLink = "http://" + domainAlias + "/" + keyName; System.out.println(downloadFileLink); } catch (Exception e) { System.out.println(e); } } }
Libraries
The libraries used in the sample Java program are:
>aws-java-sdk-2.15.19 >commons-codec-1.9 >commons-io-1.4 >commons-logging-1.1 >httpclient-4.5.2 >httpcore-4.4.4 |
>jackson-annotations-2.6.0 >jackson-core-2.6.6 >jackson-databind-2.6.6 >jackson-dataformat-cbor-2.6.6 >joda-time-2.8.1 |
Build Dependencies
The following is an example of the build.gradle file containing calls to dependent libraries:
group 'aws.test' version '1.0'apply plugin: 'java'sourceCompatibility = 1.8repositories { mavenCentral() } dependencies { implementation platform('software.amazon.awssdk:bom:2.15.19') implementation 'software.amazon.awssdk:s3' testImplementation group: 'junit', name: 'junit', version: '4.11' testCompile group: 'software.amazon.awssdk', name: 's3', version: '2.15.19' }
Uploading a File
Perform the following steps to use the Java sample above to upload a file to an S3 bucket:
1.Call the GET /ems/api/v5/stsToken
endpoint to get an STS token in the response. You will need to copy and paste the values from the response to the Java program. A sample response of this endpoint is shown below:
{ "SecretAccessKey": "Ts8HO/nndTkKezUuLGdqFvYv2U9uIT+QAF0uuzYa", "apiRegion": "eu-west-1", "s3Region": "eu-west-1", "bucketName": "sentinel-esd-qa-e2", "domainAlias": "qa-e2.test.sentinelcloud.com", "AccessKeyId": "ASIAXF67OJWZF347H7XU", "SessionToken": "FwoGZXIvYXdzEMH//////////wEaDGP5uaXPGi9SWuP85iKBAU+6V6SlWcSEQWBvo7r1Qsh/oW4VT5AzQd3w==" }
2.Replace the variable values in the sample Java program with the values obtained in the STS token:
private static String bucketName = "sentinel-esd-qa-e2"; private static String accessKeyId = "ASIAXF67OJWZF347H7XU"; private static String secretAccessKey = "Ts8HO/nndTkKezUuLGdqFvYv2U9uIT+QAF0uuzYa"; private static String sessionToken = "FwoGZXIvYXdzEMH//////////wEaDGP5uaXPGi9SWuP85iKBA+6V6SlWcSEQWBvo7r1Qsh/oW4VT5AzQd3w==; private static String domainAlias = "qa-e2.test.sentinelcloud.com"; private static String s3Region = "eu-west-1";
3.Specify the name and path of the file you want to upload. You can generate a new download identifier and specify it with the file name in the keyName
variable (for example, download-identifier/test-file
). This creates a folder named download-identifier
on the file server and stores the file named test-file
in it. The download identifier ensures that a file with the same name can be uploaded for separate downloads.
For example:
private static String keyName = "download_identifier/test-file.txt"; private static String uploadFileName = "c:\\test-file.txt";
4.Compile and run the Java program. The program uploads the file to the file server and generates a base URL of the location where the file is uploaded. The following is an example of the base URL:
<url>http://qa-e2.test.sentinelcloud.com/download_identifier/test-file.txt</url>
You can use the base URL to create a download definition in EMS.
Creating a Download Definition
After uploading a file to a file server, you can use its base URL to create a download definition by using the EMS REST API.
Use the base URL in the request body of the POST /ems/api/v5/downloads
to create a download definition. For example:
{ "download": { "identifier": "TestIdentifier", "nameVersion": { "name": "TestDownload", "version": "1.0" }, "releaseDate": "2021-04-19", "state": "ENABLE", "isAttachable": false, "description": "Download description", "file": { "name": "MyFile.txt", "size": "", "logo": "", "url": "http://qa-e2.test.sentinelcloud.com//download_identifier/test-file.txt" } } }
Accessing a Download
You can use the Get /ems/api/v5/downloads/{downloadId}
endpoint to access a download. You can also view the download from the Add Downloads page of Sentinel EMS GUI. Refer to Downloads for more information.