1 | import { Amplify } from '@aws-amplify/core';
|
2 | import { StorageAction } from '@aws-amplify/core/internals/utils';
|
3 | import { calculateContentMd5 } from '../../utils/md5.mjs';
|
4 | import { resolveS3ConfigAndInput } from '../../utils/resolveS3ConfigAndInput.mjs';
|
5 | import '../../../../errors/types/validation.mjs';
|
6 | import '../../../../utils/logger.mjs';
|
7 | import { validateStorageOperationInput } from '../../utils/validateStorageOperationInput.mjs';
|
8 | import { STORAGE_INPUT_KEY } from '../../utils/constants.mjs';
|
9 | import '../../utils/client/base.mjs';
|
10 | import '../../utils/client/getObject.mjs';
|
11 | import '../../utils/client/listObjectsV2.mjs';
|
12 | import { putObject } from '../../utils/client/putObject.mjs';
|
13 | import '../../utils/client/createMultipartUpload.mjs';
|
14 | import '../../utils/client/uploadPart.mjs';
|
15 | import '../../utils/client/completeMultipartUpload.mjs';
|
16 | import '../../utils/client/listParts.mjs';
|
17 | import '../../utils/client/abortMultipartUpload.mjs';
|
18 | import '../../utils/client/copyObject.mjs';
|
19 | import '../../utils/client/headObject.mjs';
|
20 | import '../../utils/client/deleteObject.mjs';
|
21 | import { getStorageUserAgentValue } from '../../utils/userAgent.mjs';
|
22 | import { constructContentDisposition } from '../../utils/constructContentDisposition.mjs';
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | const 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 |
|
66 | export { putObjectJob };
|
67 |
|