blakerutledge / s3-etag

Generate an accurate S3 ETAG in Node.js for any file (including multipart)

Home Page:https://www.npmjs.com/package/s3-etag

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

S3 ETAG

Build, Test & Publish CodeQL

Generate an accurate S3 ETAG in Node.js for any file (including multipart).

Please Note, this only works for unencrypted buckets.

Installation

npm install s3-etag

Usage

import { generateETag } from 's3-etag';

// Simple MD5 hash of contents for non-multipart files
const etag = generateETag(absoluteFilePath);

// MD5 hash of combined contents & part number (see below) for multipart files
const partSizeInBytes = 10 * 1024 * 1024; // 10mb
const etag = generateETag(absoluteFilePath, partSizeInBytes);

How It Works

This is a Node.js implementation of this algorithm.

At a high level:

  • If no partSizeInBytes is specified, return MD5 hash of file contents
  • If partSizeInBytes is specified:
    • Generate parts by comparing partSizeInBytes to the file size
    • Read each part from the file, MD5 hash the part, and append it to a global combined hash
    • Once all parts are processed, generate a new MD5 from the global combined hash, and suffix with the amount of parts

License

See LICENSE.md.

About

Generate an accurate S3 ETAG in Node.js for any file (including multipart)

https://www.npmjs.com/package/s3-etag

License:MIT License


Languages

Language:TypeScript 62.9%Language:Shell 29.4%Language:JavaScript 7.7%