Skip to content

optiq-image / upload

upload ​

optiq-image/upload — upload a compressed (or original) image to S3 through a presigned URL issued by your backend. Start with compressAndUpload.

Classes ​

UploadError ​

Extends ​

  • Error

Constructors ​

Constructor ​
ts
new UploadError(message, status?): UploadError;
Parameters ​
ParameterType
messagestring
status?number
Returns ​

UploadError

Overrides ​

Error.constructor

Properties ​

status? ​
ts
readonly status?: number;

Interfaces ​

CompressAndUploadOptions ​

Properties ​

PropertyTypeDescription
compress?(input, options) => Promise<CompressionResult>Custom compressor (defaults to the shared compressImage).
compression?| false | Omit<CompressCallOptions, "signal" | "onProgress">Optiq options, or false to upload the original as-is.
onCompressProgress?(event) => void-
onStage?(stage) => void-
onUploadProgress?(p) => void-
requestPresignedUploadRequestPresignedUpload-
signal?AbortSignal-
transport?HttpTransport-

CompressAndUploadResult ​

Properties ​

PropertyTypeDescription
bytesnumber-
compression?CompressionResult-
compressionError?OptiqErrorSet when compression failed and the original was uploaded instead.
contentTypestring-
fileNamestring-
key?string-
uploaded"original" | "optimized"Which bytes were uploaded.

HttpRequest ​

Properties ​

PropertyType
bodyBlob | FormData
headersRecord<string, string>
method"PUT" | "POST"
onProgress?(p) => void
signal?AbortSignal
urlstring

HttpResponse ​

Properties ​

PropertyType
headersRecord<string, string>
statusnumber

PresignedUpload ​

What your backend returns for a presigned S3 upload. Credentials never reach the browser.

Properties ​

PropertyTypeDescription
fields?Record<string, string>Form fields for presigned POST.
headers?Record<string, string>Extra headers the signature requires (PUT). Content-Type is always sent.
key?stringObject key, echoed back in the result.
method?"PUT" | "POST"PUT (presigned PutObject URL, default) or POST (presigned POST policy with fields).
urlstring-

PresignRequest ​

Properties ​

PropertyType
contentTypestring
fileNamestring
signal?AbortSignal
sizenumber

UploadProgress ​

Properties ​

PropertyType
loadednumber
totalnumber

Type Aliases ​

HttpTransport ​

ts
type HttpTransport = (req) => Promise<HttpResponse>;

Parameters ​

ParameterType
reqHttpRequest

Returns ​

Promise<HttpResponse>


RequestPresignedUpload ​

ts
type RequestPresignedUpload = (req) => Promise<PresignedUpload>;

Parameters ​

ParameterType
reqPresignRequest

Returns ​

Promise<PresignedUpload>

Variables ​

xhrTransport ​

ts
const xhrTransport: HttpTransport;

XMLHttpRequest transport: unlike fetch, it reports upload progress in all browsers.

Functions ​

compressAndUpload() ​

ts
function compressAndUpload(file, opts): Promise<CompressAndUploadResult>;

Compress (optional, never required) then upload through a presigned URL from your backend. If compression fails or does not help, the original file is uploaded unchanged. Upload errors are thrown; the caller still holds the original file and can retry.

Parameters ​

ParameterType
fileFile
optsCompressAndUploadOptions

Returns ​

Promise<CompressAndUploadResult>


uploadToPresignedUrl() ​

ts
function uploadToPresignedUrl(
   body, 
   target, 
   opts
): Promise<HttpResponse>;

Parameters ​

ParameterType
bodyBlob
targetPresignedUpload
opts{ contentType: string; fileName?: string; onProgress?: (p) => void; signal?: AbortSignal; transport?: HttpTransport; }
opts.contentTypestring
opts.fileName?string
opts.onProgress?(p) => void
opts.signal?AbortSignal
opts.transport?HttpTransport

Returns ​

Promise<HttpResponse>