UNPKG

@aws-amplify/storage

Version:

Storage category of aws-amplify

99 lines (96 loc) 3.58 kB
import { Amplify } from '@aws-amplify/core'; import { StorageAction } from '@aws-amplify/core/internals/utils'; import { resolveS3ConfigAndInput } from '../utils/resolveS3ConfigAndInput.mjs'; import '@smithy/md5-js'; import '@aws-amplify/core/internals/aws-client-utils'; import '../utils/client/runtime/s3TransferHandler/fetch.mjs'; import 'fast-xml-parser'; import '../utils/client/runtime/s3TransferHandler/xhr.mjs'; import 'buffer'; import { createDownloadTask } from '../utils/transferTask.mjs'; import '../utils/client/base.mjs'; import { getObject } from '../utils/client/getObject.mjs'; import '../utils/client/listObjectsV2.mjs'; import '../utils/client/putObject.mjs'; import '../utils/client/createMultipartUpload.mjs'; import '../utils/client/uploadPart.mjs'; import '../utils/client/completeMultipartUpload.mjs'; import '../utils/client/listParts.mjs'; import '../utils/client/abortMultipartUpload.mjs'; import '../utils/client/copyObject.mjs'; import '../utils/client/headObject.mjs'; import '../utils/client/deleteObject.mjs'; import { getStorageUserAgentValue } from '../utils/userAgent.mjs'; import '../../../errors/types/validation.mjs'; import { logger } from '../../../utils/logger.mjs'; // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 /** * Download S3 object data to memory * * @param input - The DownloadDataInput object. * @returns A cancelable task exposing result promise from `result` property. * @throws service: {@link S3Exception} - thrown when checking for existence of the object * @throws validation: {@link StorageValidationErrorCode } - Validation errors * * @example * ```ts * // Download a file from s3 bucket * const { body, eTag } = await downloadData({ key, data: file, options: { * onProgress, // Optional progress callback. * } }).result; * ``` * @example * ```ts * // Cancel a task * const downloadTask = downloadData({ key, data: file }); * //... * downloadTask.cancel(); * try { * await downloadTask.result; * } catch (error) { * if(isCancelError(error)) { * // Handle error thrown by task cancelation. * } * } *``` */ const downloadData = (input) => { const abortController = new AbortController(); const downloadTask = createDownloadTask({ job: downloadDataJob(input, abortController.signal), onCancel: (message) => { abortController.abort(message); }, }); return downloadTask; }; const downloadDataJob = ({ options: downloadDataOptions, key }, abortSignal) => async () => { const { bucket, keyPrefix, s3Config } = await resolveS3ConfigAndInput(Amplify, downloadDataOptions); const finalKey = keyPrefix + key; logger.debug(`download ${key} from ${finalKey}.`); const { Body: body, LastModified: lastModified, ContentLength: size, ETag: eTag, Metadata: metadata, VersionId: versionId, ContentType: contentType, } = await getObject({ ...s3Config, abortSignal, onDownloadProgress: downloadDataOptions?.onProgress, userAgentValue: getStorageUserAgentValue(StorageAction.DownloadData), }, { Bucket: bucket, Key: finalKey, ...(downloadDataOptions?.bytesRange && { Range: `bytes=${downloadDataOptions.bytesRange.start}-${downloadDataOptions.bytesRange.end}`, }), }); return { key, body, lastModified, size, contentType, eTag, metadata, versionId, }; }; export { downloadData }; //# sourceMappingURL=downloadData.mjs.map