S3UploadedObject
Open source

S3UploadedObject

S3UploadedObject represents the response returned by S3 upload operations such as putObject and completeMultipartUpload. It contains metadata about the uploaded object, including checksums and upload verification information.

Properties

NameTypeDescription
eTagstringThe entity tag (ETag) of the uploaded object. This is a hash of the object that can be used to verify the integrity of the uploaded data.
crc32string (optional)The base64-encoded CRC32 checksum of the uploaded object, if available.
crc32cstring (optional)The base64-encoded CRC32C checksum of the uploaded object, if available.
crc64nvmestring (optional)The base64-encoded CRC64NVME checksum of the uploaded object, if available.
sha1string (optional)The base64-encoded SHA1 checksum of the uploaded object, if available.
sha256string (optional)The base64-encoded SHA256 checksum of the uploaded object, if available.
checksumTypestring (optional)The type of checksum algorithm used. Can be “COMPOSITE” for multipart uploads or “FULL_OBJECT” for single-part uploads.
sizenumber (optional)The size of the uploaded object in bytes, if available.

Example

JavaScript
import {
  AWSConfig,
  S3Client,
} from 'https://jslib.k6.io/aws/0.14.0/s3.js';

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = 'test-jslib-aws';
const testFileKey = 'test-file.txt';

export default async function () {
  const testData = 'Hello, World!';

  // Upload the object and get the upload response
  const uploadResult = await s3.putObject(testBucketName, testFileKey, testData);

  // Access the upload metadata
  console.log('Upload ETag:', uploadResult.eTag);
  console.log('Object size:', uploadResult.size);

  // Check if checksums are available
  if (uploadResult.sha256) {
    console.log('SHA256 checksum:', uploadResult.sha256);
  }

  if (uploadResult.checksumType) {
    console.log('Checksum type:', uploadResult.checksumType);
  }

  // Verify the upload was successful
  if (uploadResult.eTag) {
    console.log('Upload successful, ETag received:', uploadResult.eTag);
  }
}

Usage in Multipart Uploads

For multipart uploads, the S3UploadedObject is returned by the completeMultipartUpload method:

JavaScript
import crypto from 'k6/crypto';
import {
  AWSConfig,
  S3Client,
} from 'https://jslib.k6.io/aws/0.14.0/s3.js';

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);

export default async function () {
  const testBucketName = 'test-jslib-aws';
  const testFileKey = 'large-file.txt';

  // Create large file data
  const bigFile = crypto.randomBytes(12 * 1024 * 1024); // 12MB

  // Initialize multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Upload parts
  const firstPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    1,
    bigFile.slice(0, 6 * 1024 * 1024)
  );

  const secondPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    2,
    bigFile.slice(6 * 1024 * 1024)
  );

  // Complete the multipart upload and get the result
  const uploadResult = await s3.completeMultipartUpload(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    [firstPart, secondPart]
  );

  // Access the completed upload metadata
  console.log('Multipart upload ETag:', uploadResult.eTag);
  console.log('Checksum type:', uploadResult.checksumType); // Likely "COMPOSITE"

  if (uploadResult.size) {
    console.log('Total object size:', uploadResult.size);
  }
}