Helpers
Server helpers for ACL, filenames, and object keys.
Import from @dimah-s3/server or @dimah-s3/core.
ACL and metadata
Resolve object ACL
GetObjectAcl to "public-read" | "private" | undefined.
Set resolveObjectAcl: true in DimahS3Config to run this automatically on
upload confirm and multipart complete.
import { resolveObjectAcl } from "@dimah-s3/server";
const acl = await resolveObjectAcl(s3, bucket, key);
// "public-read" | "private" | undefined
await resolveObjectAcl(s3, bucket, key, 3_000); // optional timeout (default 1500 ms)Build content disposition
RFC 6266 attachment header with ASCII filename and Unicode-safe filename*.
Applied automatically when the client sends fileName in a presign request.
import { buildContentDisposition } from "@dimah-s3/core";
buildContentDisposition("Q4 Report.pdf");
// attachment; filename="Q4 Report.pdf"; filename*=UTF-8''Q4%20Report.pdf
buildContentDisposition("گزارش.pdf");
// attachment; filename="_____.pdf"; filename*=UTF-8''%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4.pdfParse file name
Reads filename* first, then falls back to filename.
import { parseFileName } from "@dimah-s3/core";
parseFileName('attachment; filename="photo.jpg"');
// "photo.jpg"
parseFileName("attachment; filename*=UTF-8''%E6%8A%A5%E5%91%8A.pdf");
// "报告.pdf"
parseFileName(head.ContentDisposition);
// "photo.jpg" | undefinedObject key and extension
Build object key
Joins path segments, trims slashes, skips empty segments.
import { buildObjectKey } from "@dimah-s3/core";
buildObjectKey("uploads", userId, "avatar.png");
// "uploads/user-123/avatar.png"
buildObjectKey("/uploads/", "/", userId, "/avatar.png/");
// "uploads/user-123/avatar.png"Get file extension
Returns lowercase extension without the dot. Empty string when not found.
import { getFileExtension } from "@dimah-s3/core";
getFileExtension("archive.TAR.GZ"); // "gz"
getFileExtension("photo.jpg"); // "jpg"
getFileExtension("README"); // ""