UNPKG

2.98 kBJavaScriptView Raw
1import { Amplify } from '@aws-amplify/core';
2import { StorageAction } from '@aws-amplify/core/internals/utils';
3import { calculateContentMd5 } from '../../utils/md5.mjs';
4import { resolveS3ConfigAndInput } from '../../utils/resolveS3ConfigAndInput.mjs';
5import '../../../../errors/types/validation.mjs';
6import '../../../../utils/logger.mjs';
7import { validateStorageOperationInput } from '../../utils/validateStorageOperationInput.mjs';
8import { STORAGE_INPUT_KEY } from '../../utils/constants.mjs';
9import '../../utils/client/base.mjs';
10import '../../utils/client/getObject.mjs';
11import '../../utils/client/listObjectsV2.mjs';
12import { putObject } from '../../utils/client/putObject.mjs';
13import '../../utils/client/createMultipartUpload.mjs';
14import '../../utils/client/uploadPart.mjs';
15import '../../utils/client/completeMultipartUpload.mjs';
16import '../../utils/client/listParts.mjs';
17import '../../utils/client/abortMultipartUpload.mjs';
18import '../../utils/client/copyObject.mjs';
19import '../../utils/client/headObject.mjs';
20import '../../utils/client/deleteObject.mjs';
21import { getStorageUserAgentValue } from '../../utils/userAgent.mjs';
22import { constructContentDisposition } from '../../utils/constructContentDisposition.mjs';
23
24// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
25// SPDX-License-Identifier: Apache-2.0
26/**
27 * Get a function the returns a promise to call putObject API to S3.
28 *
29 * @internal
30 */
31const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () => {
32 const { options: uploadDataOptions, data } = uploadDataInput;
33 const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);
34 const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, identityId);
35 const finalKey = inputType === STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;
36 const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, onProgress, } = uploadDataOptions ?? {};
37 const { ETag: eTag, VersionId: versionId } = await putObject({
38 ...s3Config,
39 abortSignal,
40 onUploadProgress: onProgress,
41 userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),
42 }, {
43 Bucket: bucket,
44 Key: finalKey,
45 Body: data,
46 ContentType: contentType,
47 ContentDisposition: constructContentDisposition(contentDisposition),
48 ContentEncoding: contentEncoding,
49 Metadata: metadata,
50 ContentMD5: isObjectLockEnabled
51 ? await calculateContentMd5(data)
52 : undefined,
53 });
54 const result = {
55 eTag,
56 versionId,
57 contentType,
58 metadata,
59 size: totalLength,
60 };
61 return inputType === STORAGE_INPUT_KEY
62 ? { key: objectKey, ...result }
63 : { path: objectKey, ...result };
64};
65
66export { putObjectJob };
67//# sourceMappingURL=putObjectJob.mjs.map