diff --git a/docs/uploader/aws-s3-multipart.mdx b/docs/uploader/aws-s3-multipart.mdx index 6e7712b3ca..8a3b4cbb74 100644 --- a/docs/uploader/aws-s3-multipart.mdx +++ b/docs/uploader/aws-s3-multipart.mdx @@ -101,7 +101,7 @@ The configuration required for Uppy and Companion is this: [ { "AllowedOrigins": ["https://my-app.com"], - "AllowedMethods": ["GET", "PUT"], + "AllowedMethods": ["GET", "PUT", "POST"], "MaxAgeSeconds": 3000, "AllowedHeaders": [ "Authorization", diff --git a/packages/@uppy/aws-s3/src/HTTPCommunicationQueue.ts b/packages/@uppy/aws-s3/src/HTTPCommunicationQueue.ts index 58f7f6eee7..c015633ad9 100644 --- a/packages/@uppy/aws-s3/src/HTTPCommunicationQueue.ts +++ b/packages/@uppy/aws-s3/src/HTTPCommunicationQueue.ts @@ -242,7 +242,7 @@ export class HTTPCommunicationQueue { file: UppyFile, chunk: Chunk, signal?: AbortSignal, - ): Promise { + ) { const { method = 'POST', url, @@ -252,7 +252,7 @@ export class HTTPCommunicationQueue { signal, }).abortOn(signal) - let body + let body: FormData | Blob const data = chunk.getData() if (method.toUpperCase() === 'POST') { const formData = new FormData() @@ -267,21 +267,24 @@ export class HTTPCommunicationQueue { const { onProgress, onComplete } = chunk - const result = await this.#uploadPartBytes({ + const result = (await this.#uploadPartBytes({ signature: { url, headers, method } as any, body, size: data.size, onProgress, onComplete, signal, - }).abortOn(signal) + }).abortOn(signal)) as unknown as B // todo this doesn't make sense - return 'location' in result ? - (result as UploadPartBytesResult & B) - : ({ + // location will be missing from result if CORS is not correctly set up on the bucket. + return 'location' in result ? result : ( + { + // todo `url` is not really the final location URL of the resulting file, it's just the base URL of the bucket + // https://github.com/transloadit/uppy/issues/5388 location: removeMetadataFromURL(url), ...result, - } as any) + } + ) } async uploadFile( diff --git a/packages/@uppy/aws-s3/src/index.ts b/packages/@uppy/aws-s3/src/index.ts index 8f47632174..b20f71bf14 100644 --- a/packages/@uppy/aws-s3/src/index.ts +++ b/packages/@uppy/aws-s3/src/index.ts @@ -760,14 +760,14 @@ export default class AwsS3Multipart< } const { etag, location } = headersMap - if (method.toUpperCase() === 'POST' && location === null) { + if (method.toUpperCase() === 'POST' && location == null) { // Not being able to read the Location header is not a fatal error. // eslint-disable-next-line no-console console.warn( 'AwsS3/Multipart: Could not read the Location header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.', ) } - if (etag === null) { + if (etag == null) { reject( new Error( 'AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.',