This utility provides methods used to perform aws media uploads correctly.
in order to obtain an AWSInfoObject its necessary to call an API service that will change based on the backend of the project. The said API must be ready to respond with the following standard structure.
interface AWSInfoObject {
link: string;
data: AWSData;
}
interface AWSData {
acl: string;
'Content-Type': string;
key: string;
'x-amz-algorithm': string;
'x-amz-credential': string;
'x-amz-date': string;
policy: string;
'x-amz-signature': string;
}
- do an
http GET
request to you server to get theAWSInfoObject
- call
getAwsUploadUrlAndPayload
from this utilty to get the{url,payload}
object - do the
POST
request using the given url and payload - extract location link using
extractAwsLocation
- send back location link to you server in order to get the signed location link
- use the signed location link as an image source and display your image
- copy the
env_template.json
file and rename it asenv.json
- call your api with an
HTTP GET
request to get yourAWSInfoObject
(you need those credentials first) - copy and paste your credentials into the
env.json
file - run the local node server in the
/aws-media-helper/node-server
folder with the commandnode server.js
- run this app with
nvm use
thenyarn
and finallyyarn dev
- open your browser at the given localhost
port
- click on
generate IMAGE
(will be randomly selected from a lorem picsum pool) - click on
Send to aws
- in case of error during the upload , the status code will be shown (usually a
403
error means the credentials are expired) - in case the upload is successful, the UNSIGNED location link will be shown
The location link needs the signature to view the image directly from the AWS bucket, since those buckets are private.
Builds the payload for AWS and gives back said payload, and the url to execute the POST request
-
AWSInfoObject (
AWSInfoObject
): The object containig all the AWS info, given from the server. -
base64 (
string
): The Base64 value rapresenting an image.
-
{ url, payload } (
JSON Object
): JSON object with url and payload properties
Extract the aws location URL from the aws response object.
-
AWSResponseObject (
any
): the object retrieved from the aws response
-
AWSResponseObjectLOCATION (
string
): signed URL that points to the media stored o the aws service.
extract image format from base64 string.
-
base64 (
string
): The Base64 value rapresenting an image.
-
format (
string
): string rapresenting image format.
builds the FormData object for the aws upload.
-
base64 (
string
): The Base64 value rapresenting an image. -
AWSInfoObject (
AWSInfoObject
): The object containig all the AWS info, given from the server. -
imagetype (
string
): image format.
-
FormData (
FormData
): FormData object to be sent as payload to aws.
async function sendToAWS() {
let AwsInfo: AWSInfoObject = {...};
let AWSLocation, errorCode;
// GET your credential from the server
const urltoGetConfig = new URL("http://localhost:5000/aws")
AwsInfo = await fetch(urltoGetConfig).then(response => response.json());
console.log('AwsInfo - object retrieved from configuration',AwsInfo)
// Generate payload and url
const AWSUrlAdPayload = getAwsUploadUrlAndPayload(AwsInfo, foo.value.imageB64);
// do the POST request to AWS
const AWSResponse = await fetch(AWSUrlAdPayload.url, { method: 'post', body: AWSUrlAdPayload.payload });
console.log('AWSResponse', AWSResponse)
// Handle response as you need
if (AWSResponse.ok) {
// extract location
AWSLocation = extractAwsLocation(AWSResponse)
} else {
errorCode = AWSResponse.status;
}
}