@aws-amplify/storage 6.0.17-unstable.e316a2e.0 → 6.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/providers/s3/apis/internal/getProperties.js +1 -1
- package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/getUrl.js +6 -6
- package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/list.js +2 -2
- package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +25 -25
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/base.js +1 -1
- package/dist/cjs/providers/s3/utils/client/base.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/base64/index.native.js +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/base64/index.native.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/contentSha256middleware.js +3 -3
- package/dist/cjs/providers/s3/utils/client/runtime/contentSha256middleware.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/fetch.js +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/fetch.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js +4 -4
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/xhrTransferHandler.js +4 -4
- package/dist/cjs/providers/s3/utils/client/runtime/xhrTransferHandler.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/dom.js +4 -7
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/dom.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/pureJs.js +6 -5
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/pureJs.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +2 -2
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/md5.js +8 -3
- package/dist/cjs/providers/s3/utils/md5.js.map +1 -1
- package/dist/cjs/providers/s3/utils/md5.native.js +6 -2
- package/dist/cjs/providers/s3/utils/md5.native.js.map +1 -1
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +1 -1
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
- package/dist/cjs/providers/s3/utils/transferTask.js +10 -4
- package/dist/cjs/providers/s3/utils/transferTask.js.map +1 -1
- package/dist/esm/providers/s3/apis/getProperties.d.ts +1 -1
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs +1 -1
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs +3 -3
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/list.d.ts +1 -1
- package/dist/esm/providers/s3/apis/internal/list.mjs +2 -2
- package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/list.d.ts +3 -3
- package/dist/esm/providers/s3/apis/server/list.d.ts +3 -3
- package/dist/esm/providers/s3/apis/uploadData/multipart/getDataChunker.d.ts +2 -2
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +4 -4
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/progressTracker.d.ts +3 -3
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +6 -6
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +25 -25
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.d.ts +5 -5
- package/dist/esm/providers/s3/types/inputs.d.ts +2 -2
- package/dist/esm/providers/s3/types/options.d.ts +11 -11
- package/dist/esm/providers/s3/types/outputs.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/abortMultipartUpload.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/base.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/base.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/completeMultipartUpload.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/copyObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/copyObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/createMultipartUpload.d.ts +3 -3
- package/dist/esm/providers/s3/utils/client/createMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/deleteObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/getObject.d.ts +3 -3
- package/dist/esm/providers/s3/utils/client/getObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/headObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/listObjectsV2.d.ts +3 -3
- package/dist/esm/providers/s3/utils/client/listParts.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/listParts.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/putObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/putObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs +6 -6
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.mjs +4 -4
- package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs +4 -7
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs +6 -5
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/types.d.ts +11 -22
- package/dist/esm/providers/s3/utils/client/uploadPart.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/uploadPart.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.d.ts +1 -3
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/serializeHelpers.d.ts +1 -1
- package/dist/esm/providers/s3/utils/md5.mjs +8 -3
- package/dist/esm/providers/s3/utils/md5.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/md5.native.mjs +6 -2
- package/dist/esm/providers/s3/utils/md5.native.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +4 -4
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +1 -1
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/transferTask.d.ts +10 -10
- package/dist/esm/providers/s3/utils/transferTask.mjs +10 -4
- package/dist/esm/providers/s3/utils/transferTask.mjs.map +1 -1
- package/dist/esm/types/common.d.ts +7 -7
- package/dist/esm/types/inputs.d.ts +9 -9
- package/dist/esm/types/options.d.ts +2 -2
- package/dist/esm/types/outputs.d.ts +6 -6
- package/dist/esm/utils/resolvePrefix.d.ts +2 -2
- package/package.json +107 -106
- package/src/errors/CanceledError.ts +1 -0
- package/src/errors/utils/assertValidationError.ts +1 -1
- package/src/providers/s3/apis/copy.ts +3 -1
- package/src/providers/s3/apis/downloadData.ts +5 -3
- package/src/providers/s3/apis/getProperties.ts +5 -2
- package/src/providers/s3/apis/getUrl.ts +3 -0
- package/src/providers/s3/apis/internal/copy.ts +5 -4
- package/src/providers/s3/apis/internal/getProperties.ts +8 -6
- package/src/providers/s3/apis/internal/getUrl.ts +11 -9
- package/src/providers/s3/apis/internal/list.ts +13 -10
- package/src/providers/s3/apis/internal/remove.ts +5 -3
- package/src/providers/s3/apis/list.ts +8 -4
- package/src/providers/s3/apis/remove.ts +4 -1
- package/src/providers/s3/apis/server/copy.ts +2 -1
- package/src/providers/s3/apis/server/getProperties.ts +3 -2
- package/src/providers/s3/apis/server/getUrl.ts +2 -1
- package/src/providers/s3/apis/server/list.ts +10 -7
- package/src/providers/s3/apis/server/remove.ts +2 -1
- package/src/providers/s3/apis/uploadData/byteLength.ts +1 -0
- package/src/providers/s3/apis/uploadData/index.ts +5 -2
- package/src/providers/s3/apis/uploadData/multipart/calculatePartSize.ts +1 -0
- package/src/providers/s3/apis/uploadData/multipart/getDataChunker.ts +6 -4
- package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +12 -9
- package/src/providers/s3/apis/uploadData/multipart/progressTracker.ts +5 -4
- package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +15 -12
- package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +42 -36
- package/src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts +7 -6
- package/src/providers/s3/apis/uploadData/putObjectJob.ts +2 -2
- package/src/providers/s3/types/inputs.ts +4 -4
- package/src/providers/s3/types/options.ts +11 -11
- package/src/providers/s3/types/outputs.ts +1 -1
- package/src/providers/s3/utils/client/abortMultipartUpload.ts +5 -4
- package/src/providers/s3/utils/client/base.ts +8 -6
- package/src/providers/s3/utils/client/completeMultipartUpload.ts +14 -6
- package/src/providers/s3/utils/client/copyObject.ts +7 -4
- package/src/providers/s3/utils/client/createMultipartUpload.ts +7 -5
- package/src/providers/s3/utils/client/deleteObject.ts +6 -5
- package/src/providers/s3/utils/client/getObject.ts +14 -12
- package/src/providers/s3/utils/client/headObject.ts +6 -5
- package/src/providers/s3/utils/client/listObjectsV2.ts +6 -3
- package/src/providers/s3/utils/client/listParts.ts +9 -6
- package/src/providers/s3/utils/client/putObject.ts +6 -5
- package/src/providers/s3/utils/client/runtime/base64/index.browser.ts +2 -1
- package/src/providers/s3/utils/client/runtime/base64/index.native.ts +1 -1
- package/src/providers/s3/utils/client/runtime/contentSha256middleware.ts +6 -4
- package/src/providers/s3/utils/client/runtime/s3TransferHandler/fetch.ts +7 -5
- package/src/providers/s3/utils/client/runtime/s3TransferHandler/xhr.ts +11 -11
- package/src/providers/s3/utils/client/runtime/xhrTransferHandler.ts +21 -14
- package/src/providers/s3/utils/client/runtime/xmlParser/dom.ts +6 -7
- package/src/providers/s3/utils/client/runtime/xmlParser/pureJs.ts +10 -5
- package/src/providers/s3/utils/client/types.ts +12 -14
- package/src/providers/s3/utils/client/uploadPart.ts +6 -5
- package/src/providers/s3/utils/client/utils/deserializeHelpers.ts +13 -8
- package/src/providers/s3/utils/client/utils/parsePayload.ts +6 -4
- package/src/providers/s3/utils/client/utils/serializeHelpers.ts +8 -5
- package/src/providers/s3/utils/md5.native.ts +9 -3
- package/src/providers/s3/utils/md5.ts +12 -4
- package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +10 -8
- package/src/providers/s3/utils/transferTask.ts +26 -14
- package/src/providers/s3/utils/userAgent.ts +1 -1
- package/src/types/common.ts +7 -7
- package/src/types/inputs.ts +11 -11
- package/src/types/options.ts +2 -2
- package/src/types/outputs.ts +6 -6
- package/src/utils/resolvePrefix.ts +7 -4
|
@@ -5,15 +5,16 @@ import {
|
|
|
5
5
|
AmplifyServer,
|
|
6
6
|
getAmplifyServerContext,
|
|
7
7
|
} from '@aws-amplify/core/internals/adapter-core';
|
|
8
|
+
|
|
8
9
|
import { GetPropertiesInput, GetPropertiesOutput } from '../../types';
|
|
9
10
|
import { getProperties as getPropertiesInternal } from '../internal/getProperties';
|
|
10
11
|
|
|
11
12
|
export const getProperties = (
|
|
12
13
|
contextSpec: AmplifyServer.ContextSpec,
|
|
13
|
-
input: GetPropertiesInput
|
|
14
|
+
input: GetPropertiesInput,
|
|
14
15
|
): Promise<GetPropertiesOutput> => {
|
|
15
16
|
return getPropertiesInternal(
|
|
16
17
|
getAmplifyServerContext(contextSpec).amplify,
|
|
17
|
-
input
|
|
18
|
+
input,
|
|
18
19
|
);
|
|
19
20
|
};
|
|
@@ -5,12 +5,13 @@ import {
|
|
|
5
5
|
AmplifyServer,
|
|
6
6
|
getAmplifyServerContext,
|
|
7
7
|
} from '@aws-amplify/core/internals/adapter-core';
|
|
8
|
+
|
|
8
9
|
import { GetUrlInput, GetUrlOutput } from '../../types';
|
|
9
10
|
import { getUrl as getUrlInternal } from '../internal/getUrl';
|
|
10
11
|
|
|
11
12
|
export const getUrl = async (
|
|
12
13
|
contextSpec: AmplifyServer.ContextSpec,
|
|
13
|
-
input: GetUrlInput
|
|
14
|
+
input: GetUrlInput,
|
|
14
15
|
): Promise<GetUrlOutput> => {
|
|
15
16
|
return getUrlInternal(getAmplifyServerContext(contextSpec).amplify, input);
|
|
16
17
|
};
|
|
@@ -5,15 +5,18 @@ import {
|
|
|
5
5
|
AmplifyServer,
|
|
6
6
|
getAmplifyServerContext,
|
|
7
7
|
} from '@aws-amplify/core/internals/adapter-core';
|
|
8
|
+
|
|
8
9
|
import {
|
|
9
10
|
ListAllInput,
|
|
10
|
-
ListPaginateInput,
|
|
11
11
|
ListAllOutput,
|
|
12
|
+
ListPaginateInput,
|
|
12
13
|
ListPaginateOutput,
|
|
14
|
+
S3Exception,
|
|
13
15
|
} from '../../types';
|
|
14
16
|
import { list as listInternal } from '../internal/list';
|
|
17
|
+
import { StorageValidationErrorCode } from '../../../../errors/types/validation';
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
interface ListApi {
|
|
17
20
|
/**
|
|
18
21
|
* Lists bucket objects with pagination.
|
|
19
22
|
* @param {ListPaginateInput} The input object
|
|
@@ -24,7 +27,7 @@ type ListApi = {
|
|
|
24
27
|
*/
|
|
25
28
|
(
|
|
26
29
|
contextSpec: AmplifyServer.ContextSpec,
|
|
27
|
-
input?: ListPaginateInput
|
|
30
|
+
input?: ListPaginateInput,
|
|
28
31
|
): Promise<ListPaginateOutput>;
|
|
29
32
|
/**
|
|
30
33
|
* Lists all bucket objects.
|
|
@@ -35,16 +38,16 @@ type ListApi = {
|
|
|
35
38
|
*/
|
|
36
39
|
(
|
|
37
40
|
contextSpec: AmplifyServer.ContextSpec,
|
|
38
|
-
input?: ListAllInput
|
|
41
|
+
input?: ListAllInput,
|
|
39
42
|
): Promise<ListAllOutput>;
|
|
40
|
-
}
|
|
43
|
+
}
|
|
41
44
|
|
|
42
45
|
export const list: ListApi = (
|
|
43
46
|
contextSpec: AmplifyServer.ContextSpec,
|
|
44
|
-
input?: ListAllInput | ListPaginateInput
|
|
47
|
+
input?: ListAllInput | ListPaginateInput,
|
|
45
48
|
): Promise<ListAllOutput | ListPaginateOutput> => {
|
|
46
49
|
return listInternal(
|
|
47
50
|
getAmplifyServerContext(contextSpec).amplify,
|
|
48
|
-
input ?? {}
|
|
51
|
+
input ?? {},
|
|
49
52
|
);
|
|
50
53
|
};
|
|
@@ -5,12 +5,13 @@ import {
|
|
|
5
5
|
AmplifyServer,
|
|
6
6
|
getAmplifyServerContext,
|
|
7
7
|
} from '@aws-amplify/core/internals/adapter-core';
|
|
8
|
+
|
|
8
9
|
import { RemoveInput, RemoveOutput } from '../../types';
|
|
9
10
|
import { remove as removeInternal } from '../internal/remove';
|
|
10
11
|
|
|
11
12
|
export const remove = (
|
|
12
13
|
contextSpec: AmplifyServer.ContextSpec,
|
|
13
|
-
input: RemoveInput
|
|
14
|
+
input: RemoveInput,
|
|
14
15
|
): Promise<RemoveOutput> => {
|
|
15
16
|
return removeInternal(getAmplifyServerContext(contextSpec).amplify, input);
|
|
16
17
|
};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { UploadDataInput, UploadDataOutput
|
|
4
|
+
import { S3Exception, UploadDataInput, UploadDataOutput } from '../../types';
|
|
5
5
|
import { createUploadTask } from '../../utils';
|
|
6
6
|
import { assertValidationError } from '../../../../errors/utils/assertValidationError';
|
|
7
7
|
import { StorageValidationErrorCode } from '../../../../errors/types/validation';
|
|
8
8
|
import { DEFAULT_PART_SIZE, MAX_OBJECT_SIZE } from '../../utils/constants';
|
|
9
|
+
|
|
9
10
|
import { byteLength } from './byteLength';
|
|
10
11
|
import { putObjectJob } from './putObjectJob';
|
|
11
12
|
import { getMultipartUploadHandlers } from './multipart';
|
|
@@ -64,11 +65,12 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
|
|
|
64
65
|
const dataByteLength = byteLength(data);
|
|
65
66
|
assertValidationError(
|
|
66
67
|
dataByteLength === undefined || dataByteLength <= MAX_OBJECT_SIZE,
|
|
67
|
-
StorageValidationErrorCode.ObjectIsTooLarge
|
|
68
|
+
StorageValidationErrorCode.ObjectIsTooLarge,
|
|
68
69
|
);
|
|
69
70
|
|
|
70
71
|
if (dataByteLength && dataByteLength <= DEFAULT_PART_SIZE) {
|
|
71
72
|
const abortController = new AbortController();
|
|
73
|
+
|
|
72
74
|
return createUploadTask({
|
|
73
75
|
isMultipartUpload: false,
|
|
74
76
|
job: putObjectJob(input, abortController.signal, dataByteLength),
|
|
@@ -79,6 +81,7 @@ export const uploadData = (input: UploadDataInput): UploadDataOutput => {
|
|
|
79
81
|
} else {
|
|
80
82
|
const { multipartUploadJob, onPause, onResume, onCancel } =
|
|
81
83
|
getMultipartUploadHandlers(input, dataByteLength);
|
|
84
|
+
|
|
82
85
|
return createUploadTask({
|
|
83
86
|
isMultipartUpload: true,
|
|
84
87
|
job: multipartUploadJob,
|
|
@@ -7,17 +7,18 @@ import {
|
|
|
7
7
|
validationErrorMap,
|
|
8
8
|
} from '../../../../../errors/types/validation';
|
|
9
9
|
import { StorageError } from '../../../../../errors/StorageError';
|
|
10
|
+
|
|
10
11
|
import { calculatePartSize } from './calculatePartSize';
|
|
11
12
|
|
|
12
|
-
export
|
|
13
|
+
export interface PartToUpload {
|
|
13
14
|
partNumber: number;
|
|
14
15
|
data: Blob | ArrayBuffer | string;
|
|
15
16
|
size: number;
|
|
16
|
-
}
|
|
17
|
+
}
|
|
17
18
|
|
|
18
19
|
export const getDataChunker = (
|
|
19
20
|
data: StorageUploadDataPayload,
|
|
20
|
-
totalSize?: number
|
|
21
|
+
totalSize?: number,
|
|
21
22
|
): Generator<PartToUpload, void, undefined> => {
|
|
22
23
|
const partSize = calculatePartSize(totalSize);
|
|
23
24
|
|
|
@@ -29,6 +30,7 @@ export const getDataChunker = (
|
|
|
29
30
|
return helper(data, 0, data.byteLength, partSize);
|
|
30
31
|
} else if (typeof data === 'string') {
|
|
31
32
|
const blob = new Blob([data]);
|
|
33
|
+
|
|
32
34
|
return getDataChunker(blob, blob.size);
|
|
33
35
|
} else {
|
|
34
36
|
throw new StorageError({
|
|
@@ -42,7 +44,7 @@ const helper = function* (
|
|
|
42
44
|
buffer: ArrayBuffer | Blob,
|
|
43
45
|
byteOffset: number,
|
|
44
46
|
byteLength: number,
|
|
45
|
-
partSize: number
|
|
47
|
+
partSize: number,
|
|
46
48
|
): Generator<PartToUpload, void, undefined> {
|
|
47
49
|
let partNumber = 1;
|
|
48
50
|
let startByte = byteOffset;
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
import { StorageAccessLevel } from '@aws-amplify/core';
|
|
5
5
|
|
|
6
|
+
import { ResolvedS3Config } from '../../../types/options';
|
|
7
|
+
import { StorageUploadDataPayload } from '../../../../../types';
|
|
8
|
+
import { Part, createMultipartUpload } from '../../../utils/client';
|
|
9
|
+
import { logger } from '../../../../../utils';
|
|
10
|
+
|
|
6
11
|
import {
|
|
7
12
|
cacheMultipartUpload,
|
|
8
13
|
findCachedUploadParts,
|
|
9
14
|
getUploadsCacheKey,
|
|
10
15
|
} from './uploadCache';
|
|
11
|
-
import { ResolvedS3Config } from '../../../types/options';
|
|
12
|
-
import { StorageUploadDataPayload } from '../../../../../types';
|
|
13
|
-
import { Part, createMultipartUpload } from '../../../utils/client';
|
|
14
|
-
import { logger } from '../../../../../utils';
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
interface LoadOrCreateMultipartUploadOptions {
|
|
17
18
|
s3Config: ResolvedS3Config;
|
|
18
19
|
data: StorageUploadDataPayload;
|
|
19
20
|
bucket: string;
|
|
@@ -26,12 +27,12 @@ type LoadOrCreateMultipartUploadOptions = {
|
|
|
26
27
|
metadata?: Record<string, string>;
|
|
27
28
|
size?: number;
|
|
28
29
|
abortSignal?: AbortSignal;
|
|
29
|
-
}
|
|
30
|
+
}
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
interface LoadOrCreateMultipartUploadResult {
|
|
32
33
|
uploadId: string;
|
|
33
34
|
cachedParts: Part[];
|
|
34
|
-
}
|
|
35
|
+
}
|
|
35
36
|
|
|
36
37
|
/**
|
|
37
38
|
* Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart
|
|
@@ -103,10 +104,11 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
103
104
|
ContentDisposition: contentDisposition,
|
|
104
105
|
ContentEncoding: contentEncoding,
|
|
105
106
|
Metadata: metadata,
|
|
106
|
-
}
|
|
107
|
+
},
|
|
107
108
|
);
|
|
108
109
|
if (size === undefined) {
|
|
109
110
|
logger.debug('uploaded data size cannot be determined, skipping cache.');
|
|
111
|
+
|
|
110
112
|
return {
|
|
111
113
|
uploadId: UploadId!,
|
|
112
114
|
cachedParts: [],
|
|
@@ -126,6 +128,7 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
126
128
|
key,
|
|
127
129
|
fileName: data instanceof File ? data.name : '',
|
|
128
130
|
});
|
|
131
|
+
|
|
129
132
|
return {
|
|
130
133
|
uploadId: UploadId!,
|
|
131
134
|
cachedParts: [],
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
import { TransferProgressEvent } from '../../../../../types';
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
interface ConcurrentUploadsProgressTrackerOptions {
|
|
7
7
|
size?: number;
|
|
8
|
-
onProgress
|
|
9
|
-
}
|
|
8
|
+
onProgress?(event: TransferProgressEvent): void;
|
|
9
|
+
}
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Track the progress from multiple concurrent uploads, and invoke the onProgress callback.
|
|
@@ -22,13 +22,14 @@ export const getConcurrentUploadsProgressTracker = ({
|
|
|
22
22
|
const getTransferredBytes = () =>
|
|
23
23
|
transferredBytesPerListener.reduce(
|
|
24
24
|
(acc, transferredBytes) => acc + transferredBytes,
|
|
25
|
-
0
|
|
25
|
+
0,
|
|
26
26
|
);
|
|
27
27
|
|
|
28
28
|
return {
|
|
29
29
|
getOnProgressListener: () => {
|
|
30
30
|
transferredBytesPerListener.push(0);
|
|
31
31
|
const listenerIndex = transferredBytesPerListener.length - 1;
|
|
32
|
+
|
|
32
33
|
return (event: TransferProgressEvent) => {
|
|
33
34
|
const { transferredBytes } = event;
|
|
34
35
|
transferredBytesPerListener[listenerIndex] = transferredBytes;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
-
defaultStorage,
|
|
6
5
|
KeyValueStorageInterface,
|
|
7
6
|
StorageAccessLevel,
|
|
7
|
+
defaultStorage,
|
|
8
8
|
} from '@aws-amplify/core';
|
|
9
9
|
|
|
10
10
|
import { UPLOADS_STORAGE_KEY } from '../../../utils/constants';
|
|
@@ -14,12 +14,12 @@ import { logger } from '../../../../../utils';
|
|
|
14
14
|
|
|
15
15
|
const ONE_HOUR = 1000 * 60 * 60;
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
interface FindCachedUploadPartsOptions {
|
|
18
18
|
cacheKey: string;
|
|
19
19
|
s3Config: ResolvedS3Config;
|
|
20
20
|
bucket: string;
|
|
21
21
|
finalKey: string;
|
|
22
|
-
}
|
|
22
|
+
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Find the cached multipart upload id and get the parts that have been uploaded
|
|
@@ -47,7 +47,7 @@ export const findCachedUploadParts = async ({
|
|
|
47
47
|
|
|
48
48
|
await defaultStorage.setItem(
|
|
49
49
|
UPLOADS_STORAGE_KEY,
|
|
50
|
-
JSON.stringify(cachedUploads)
|
|
50
|
+
JSON.stringify(cachedUploads),
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
try {
|
|
@@ -56,6 +56,7 @@ export const findCachedUploadParts = async ({
|
|
|
56
56
|
Key: finalKey,
|
|
57
57
|
UploadId: cachedUpload.uploadId,
|
|
58
58
|
});
|
|
59
|
+
|
|
59
60
|
return {
|
|
60
61
|
parts: Parts,
|
|
61
62
|
uploadId: cachedUpload.uploadId,
|
|
@@ -63,38 +64,40 @@ export const findCachedUploadParts = async ({
|
|
|
63
64
|
} catch (e) {
|
|
64
65
|
logger.debug('failed to list cached parts, removing cached upload.');
|
|
65
66
|
await removeCachedUpload(cacheKey);
|
|
67
|
+
|
|
66
68
|
return null;
|
|
67
69
|
}
|
|
68
70
|
};
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
interface FileMetadata {
|
|
71
73
|
bucket: string;
|
|
72
74
|
fileName: string;
|
|
73
75
|
key: string;
|
|
74
76
|
uploadId: string;
|
|
75
77
|
// Unix timestamp in ms
|
|
76
78
|
lastTouched: number;
|
|
77
|
-
}
|
|
79
|
+
}
|
|
78
80
|
|
|
79
81
|
const listCachedUploadTasks = async (
|
|
80
|
-
kvStorage: KeyValueStorageInterface
|
|
82
|
+
kvStorage: KeyValueStorageInterface,
|
|
81
83
|
): Promise<Record<string, FileMetadata>> => {
|
|
82
84
|
try {
|
|
83
85
|
return JSON.parse((await kvStorage.getItem(UPLOADS_STORAGE_KEY)) ?? '{}');
|
|
84
86
|
} catch (e) {
|
|
85
87
|
logger.debug('failed to parse cached uploads record.');
|
|
88
|
+
|
|
86
89
|
return {};
|
|
87
90
|
}
|
|
88
91
|
};
|
|
89
92
|
|
|
90
|
-
|
|
93
|
+
interface UploadsCacheKeyOptions {
|
|
91
94
|
size: number;
|
|
92
95
|
contentType?: string;
|
|
93
96
|
bucket: string;
|
|
94
97
|
accessLevel: StorageAccessLevel;
|
|
95
98
|
key: string;
|
|
96
99
|
file?: File;
|
|
97
|
-
}
|
|
100
|
+
}
|
|
98
101
|
|
|
99
102
|
/**
|
|
100
103
|
* Get the cache key of a multipart upload. Data source cached by different: size, content type, bucket, access level,
|
|
@@ -122,7 +125,7 @@ export const getUploadsCacheKey = ({
|
|
|
122
125
|
|
|
123
126
|
export const cacheMultipartUpload = async (
|
|
124
127
|
cacheKey: string,
|
|
125
|
-
fileMetadata: Omit<FileMetadata, 'lastTouched'
|
|
128
|
+
fileMetadata: Omit<FileMetadata, 'lastTouched'>,
|
|
126
129
|
): Promise<void> => {
|
|
127
130
|
const cachedUploads = await listCachedUploadTasks(defaultStorage);
|
|
128
131
|
cachedUploads[cacheKey] = {
|
|
@@ -131,7 +134,7 @@ export const cacheMultipartUpload = async (
|
|
|
131
134
|
};
|
|
132
135
|
await defaultStorage.setItem(
|
|
133
136
|
UPLOADS_STORAGE_KEY,
|
|
134
|
-
JSON.stringify(cachedUploads)
|
|
137
|
+
JSON.stringify(cachedUploads),
|
|
135
138
|
);
|
|
136
139
|
};
|
|
137
140
|
|
|
@@ -140,6 +143,6 @@ export const removeCachedUpload = async (cacheKey: string): Promise<void> => {
|
|
|
140
143
|
delete cachedUploads[cacheKey];
|
|
141
144
|
await defaultStorage.setItem(
|
|
142
145
|
UPLOADS_STORAGE_KEY,
|
|
143
|
-
JSON.stringify(cachedUploads)
|
|
146
|
+
JSON.stringify(cachedUploads),
|
|
144
147
|
);
|
|
145
148
|
};
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { Amplify, StorageAccessLevel } from '@aws-amplify/core';
|
|
5
5
|
import { StorageAction } from '@aws-amplify/core/internals/utils';
|
|
6
6
|
|
|
7
|
-
import { getDataChunker } from './getDataChunker';
|
|
8
7
|
import { UploadDataInput } from '../../../types';
|
|
9
8
|
import { resolveS3ConfigAndInput } from '../../../utils';
|
|
10
9
|
import { Item as S3Item } from '../../../types/outputs';
|
|
@@ -12,11 +11,7 @@ import {
|
|
|
12
11
|
DEFAULT_ACCESS_LEVEL,
|
|
13
12
|
DEFAULT_QUEUE_SIZE,
|
|
14
13
|
} from '../../../utils/constants';
|
|
15
|
-
import { loadOrCreateMultipartUpload } from './initialUpload';
|
|
16
14
|
import { ResolvedS3Config } from '../../../types/options';
|
|
17
|
-
import { getConcurrentUploadsProgressTracker } from './progressTracker';
|
|
18
|
-
import { getUploadsCacheKey, removeCachedUpload } from './uploadCache';
|
|
19
|
-
import { uploadPartExecutor } from './uploadPartExecutor';
|
|
20
15
|
import { StorageError } from '../../../../../errors/StorageError';
|
|
21
16
|
import { CanceledError } from '../../../../../errors/CanceledError';
|
|
22
17
|
import {
|
|
@@ -28,6 +23,12 @@ import {
|
|
|
28
23
|
import { getStorageUserAgentValue } from '../../../utils/userAgent';
|
|
29
24
|
import { logger } from '../../../../../utils';
|
|
30
25
|
|
|
26
|
+
import { uploadPartExecutor } from './uploadPartExecutor';
|
|
27
|
+
import { getUploadsCacheKey, removeCachedUpload } from './uploadCache';
|
|
28
|
+
import { getConcurrentUploadsProgressTracker } from './progressTracker';
|
|
29
|
+
import { loadOrCreateMultipartUpload } from './initialUpload';
|
|
30
|
+
import { getDataChunker } from './getDataChunker';
|
|
31
|
+
|
|
31
32
|
/**
|
|
32
33
|
* Create closure hiding the multipart upload implementation details and expose the upload job and control functions(
|
|
33
34
|
* onPause, onResume, onCancel).
|
|
@@ -36,7 +37,7 @@ import { logger } from '../../../../../utils';
|
|
|
36
37
|
*/
|
|
37
38
|
export const getMultipartUploadHandlers = (
|
|
38
39
|
{ options: uploadDataOptions, key, data }: UploadDataInput,
|
|
39
|
-
size?: number
|
|
40
|
+
size?: number,
|
|
40
41
|
) => {
|
|
41
42
|
let resolveCallback: ((value: S3Item) => void) | undefined;
|
|
42
43
|
let rejectCallback: ((reason?: any) => void) | undefined;
|
|
@@ -46,24 +47,25 @@ export const getMultipartUploadHandlers = (
|
|
|
46
47
|
completedParts: Part[];
|
|
47
48
|
}
|
|
48
49
|
| undefined;
|
|
49
|
-
let
|
|
50
|
+
let resolvedS3Config: ResolvedS3Config | undefined;
|
|
50
51
|
let abortController: AbortController | undefined;
|
|
51
|
-
let
|
|
52
|
-
let
|
|
52
|
+
let resolvedBucket: string | undefined;
|
|
53
|
+
let resolvedKeyPrefix: string | undefined;
|
|
53
54
|
let uploadCacheKey: string | undefined;
|
|
54
55
|
// Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().
|
|
55
56
|
// The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.
|
|
56
57
|
// This should be replaced by a special abort reason. However,the support of this API is lagged behind.
|
|
57
|
-
let isAbortSignalFromPause
|
|
58
|
+
let isAbortSignalFromPause = false;
|
|
58
59
|
|
|
59
60
|
const startUpload = async (): Promise<S3Item> => {
|
|
60
61
|
const resolvedS3Options = await resolveS3ConfigAndInput(
|
|
61
62
|
Amplify,
|
|
62
|
-
uploadDataOptions
|
|
63
|
+
uploadDataOptions,
|
|
63
64
|
);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
|
|
66
|
+
resolvedS3Config = resolvedS3Options.s3Config;
|
|
67
|
+
resolvedBucket = resolvedS3Options.bucket;
|
|
68
|
+
resolvedKeyPrefix = resolvedS3Options.keyPrefix;
|
|
67
69
|
|
|
68
70
|
abortController = new AbortController();
|
|
69
71
|
isAbortSignalFromPause = false;
|
|
@@ -79,10 +81,10 @@ export const getMultipartUploadHandlers = (
|
|
|
79
81
|
|
|
80
82
|
if (!inProgressUpload) {
|
|
81
83
|
const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({
|
|
82
|
-
s3Config,
|
|
84
|
+
s3Config: resolvedS3Config,
|
|
83
85
|
accessLevel: resolveAccessLevel(accessLevel),
|
|
84
|
-
bucket,
|
|
85
|
-
keyPrefix,
|
|
86
|
+
bucket: resolvedBucket,
|
|
87
|
+
keyPrefix: resolvedKeyPrefix,
|
|
86
88
|
key,
|
|
87
89
|
contentType,
|
|
88
90
|
contentDisposition,
|
|
@@ -98,21 +100,21 @@ export const getMultipartUploadHandlers = (
|
|
|
98
100
|
};
|
|
99
101
|
}
|
|
100
102
|
|
|
101
|
-
const finalKey =
|
|
103
|
+
const finalKey = resolvedKeyPrefix + key;
|
|
102
104
|
uploadCacheKey = size
|
|
103
105
|
? getUploadsCacheKey({
|
|
104
106
|
file: data instanceof File ? data : undefined,
|
|
105
107
|
accessLevel: resolveAccessLevel(uploadDataOptions?.accessLevel),
|
|
106
108
|
contentType: uploadDataOptions?.contentType,
|
|
107
|
-
bucket:
|
|
109
|
+
bucket: resolvedBucket!,
|
|
108
110
|
size,
|
|
109
111
|
key,
|
|
110
|
-
|
|
112
|
+
})
|
|
111
113
|
: undefined;
|
|
112
114
|
|
|
113
115
|
const dataChunker = getDataChunker(data, size);
|
|
114
116
|
const completedPartNumberSet = new Set<number>(
|
|
115
|
-
inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber!)
|
|
117
|
+
inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber!),
|
|
116
118
|
);
|
|
117
119
|
const onPartUploadCompletion = (partNumber: number, eTag: string) => {
|
|
118
120
|
inProgressUpload?.completedParts.push({
|
|
@@ -132,15 +134,15 @@ export const getMultipartUploadHandlers = (
|
|
|
132
134
|
uploadPartExecutor({
|
|
133
135
|
dataChunkerGenerator: dataChunker,
|
|
134
136
|
completedPartNumberSet,
|
|
135
|
-
s3Config,
|
|
137
|
+
s3Config: resolvedS3Config,
|
|
136
138
|
abortSignal: abortController.signal,
|
|
137
|
-
bucket,
|
|
139
|
+
bucket: resolvedBucket,
|
|
138
140
|
finalKey,
|
|
139
141
|
uploadId: inProgressUpload.uploadId,
|
|
140
142
|
onPartUploadCompletion,
|
|
141
143
|
onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),
|
|
142
144
|
isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,
|
|
143
|
-
})
|
|
145
|
+
}),
|
|
144
146
|
);
|
|
145
147
|
}
|
|
146
148
|
|
|
@@ -148,27 +150,30 @@ export const getMultipartUploadHandlers = (
|
|
|
148
150
|
|
|
149
151
|
const { ETag: eTag } = await completeMultipartUpload(
|
|
150
152
|
{
|
|
151
|
-
...
|
|
153
|
+
...resolvedS3Config,
|
|
152
154
|
abortSignal: abortController.signal,
|
|
153
155
|
userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),
|
|
154
156
|
},
|
|
155
157
|
{
|
|
156
|
-
Bucket:
|
|
158
|
+
Bucket: resolvedBucket,
|
|
157
159
|
Key: finalKey,
|
|
158
160
|
UploadId: inProgressUpload.uploadId,
|
|
159
161
|
MultipartUpload: {
|
|
160
162
|
Parts: inProgressUpload.completedParts.sort(
|
|
161
|
-
(partA, partB) => partA.PartNumber! - partB.PartNumber
|
|
163
|
+
(partA, partB) => partA.PartNumber! - partB.PartNumber!,
|
|
162
164
|
),
|
|
163
165
|
},
|
|
164
|
-
}
|
|
166
|
+
},
|
|
165
167
|
);
|
|
166
168
|
|
|
167
169
|
if (size) {
|
|
168
|
-
const { ContentLength: uploadedObjectSize } = await headObject(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
const { ContentLength: uploadedObjectSize } = await headObject(
|
|
171
|
+
resolvedS3Config,
|
|
172
|
+
{
|
|
173
|
+
Bucket: resolvedBucket,
|
|
174
|
+
Key: finalKey,
|
|
175
|
+
},
|
|
176
|
+
);
|
|
172
177
|
if (uploadedObjectSize && uploadedObjectSize !== size) {
|
|
173
178
|
throw new StorageError({
|
|
174
179
|
name: 'Error',
|
|
@@ -225,9 +230,9 @@ export const getMultipartUploadHandlers = (
|
|
|
225
230
|
await removeCachedUpload(uploadCacheKey);
|
|
226
231
|
}
|
|
227
232
|
// 3. clear multipart upload on server side.
|
|
228
|
-
await abortMultipartUpload(
|
|
229
|
-
Bucket:
|
|
230
|
-
Key:
|
|
233
|
+
await abortMultipartUpload(resolvedS3Config!, {
|
|
234
|
+
Bucket: resolvedBucket,
|
|
235
|
+
Key: resolvedKeyPrefix! + key,
|
|
231
236
|
UploadId: inProgressUpload?.uploadId,
|
|
232
237
|
});
|
|
233
238
|
};
|
|
@@ -238,9 +243,10 @@ export const getMultipartUploadHandlers = (
|
|
|
238
243
|
rejectCallback!(
|
|
239
244
|
// Internal error that should not be exposed to the users. They should use isCancelError() to check if
|
|
240
245
|
// the error is caused by cancel().
|
|
241
|
-
new CanceledError(message ? { message } : undefined)
|
|
246
|
+
new CanceledError(message ? { message } : undefined),
|
|
242
247
|
);
|
|
243
248
|
};
|
|
249
|
+
|
|
244
250
|
return {
|
|
245
251
|
multipartUploadJob,
|
|
246
252
|
onPause,
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { PartToUpload } from './getDataChunker';
|
|
5
4
|
import { TransferProgressEvent } from '../../../../../types';
|
|
6
5
|
import { ResolvedS3Config } from '../../../types/options';
|
|
7
6
|
import { calculateContentMd5 } from '../../../utils';
|
|
8
7
|
import { uploadPart } from '../../../utils/client';
|
|
9
8
|
import { logger } from '../../../../../utils';
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
import { PartToUpload } from './getDataChunker';
|
|
11
|
+
|
|
12
|
+
interface UploadPartExecutorOptions {
|
|
12
13
|
dataChunkerGenerator: Generator<PartToUpload, void, undefined>;
|
|
13
14
|
completedPartNumberSet: Set<number>;
|
|
14
15
|
s3Config: ResolvedS3Config;
|
|
@@ -17,9 +18,9 @@ type UploadPartExecutorOptions = {
|
|
|
17
18
|
finalKey: string;
|
|
18
19
|
uploadId: string;
|
|
19
20
|
isObjectLockEnabled?: boolean;
|
|
20
|
-
onPartUploadCompletion
|
|
21
|
-
onProgress
|
|
22
|
-
}
|
|
21
|
+
onPartUploadCompletion(partNumber: number, eTag: string): void;
|
|
22
|
+
onProgress?(event: TransferProgressEvent): void;
|
|
23
|
+
}
|
|
23
24
|
|
|
24
25
|
export const uploadPartExecutor = async ({
|
|
25
26
|
dataChunkerGenerator,
|
|
@@ -68,7 +69,7 @@ export const uploadPartExecutor = async ({
|
|
|
68
69
|
ContentMD5: isObjectLockEnabled
|
|
69
70
|
? await calculateContentMd5(data)
|
|
70
71
|
: undefined,
|
|
71
|
-
}
|
|
72
|
+
},
|
|
72
73
|
);
|
|
73
74
|
transferredBytes += size;
|
|
74
75
|
// eTag will always be set even the S3 model interface marks it as optional.
|
|
@@ -19,7 +19,7 @@ export const putObjectJob =
|
|
|
19
19
|
(
|
|
20
20
|
{ options: uploadDataOptions, key, data }: UploadDataInput,
|
|
21
21
|
abortSignal: AbortSignal,
|
|
22
|
-
totalLength?: number
|
|
22
|
+
totalLength?: number,
|
|
23
23
|
) =>
|
|
24
24
|
async (): Promise<S3Item> => {
|
|
25
25
|
const { bucket, keyPrefix, s3Config, isObjectLockEnabled } =
|
|
@@ -52,7 +52,7 @@ export const putObjectJob =
|
|
|
52
52
|
ContentMD5: isObjectLockEnabled
|
|
53
53
|
? await calculateContentMd5(data)
|
|
54
54
|
: undefined,
|
|
55
|
-
}
|
|
55
|
+
},
|
|
56
56
|
);
|
|
57
57
|
|
|
58
58
|
return {
|
|
@@ -3,23 +3,23 @@
|
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
StorageCopyInput,
|
|
6
|
+
StorageDownloadDataInput,
|
|
6
7
|
StorageGetPropertiesInput,
|
|
7
8
|
StorageGetUrlInput,
|
|
8
9
|
StorageListInput,
|
|
9
10
|
StorageRemoveInput,
|
|
10
|
-
StorageDownloadDataInput,
|
|
11
11
|
StorageUploadDataInput,
|
|
12
12
|
} from '../../../types';
|
|
13
13
|
import {
|
|
14
|
+
CopyDestinationOptions,
|
|
15
|
+
CopySourceOptions,
|
|
16
|
+
DownloadDataOptions,
|
|
14
17
|
GetPropertiesOptions,
|
|
15
18
|
GetUrlOptions,
|
|
16
19
|
ListAllOptions,
|
|
17
20
|
ListPaginateOptions,
|
|
18
21
|
RemoveOptions,
|
|
19
|
-
DownloadDataOptions,
|
|
20
22
|
UploadDataOptions,
|
|
21
|
-
CopyDestinationOptions,
|
|
22
|
-
CopySourceOptions,
|
|
23
23
|
} from '../types';
|
|
24
24
|
|
|
25
25
|
// TODO: support use accelerate endpoint option
|