Skip to content

Commit

Permalink
@uppy/aws-s3: clarify and warn when incorrect buckets settings are us…
Browse files Browse the repository at this point in the history
  • Loading branch information
mifi authored Nov 11, 2024
1 parent 014f1da commit 8cb65bb
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
2 changes: 1 addition & 1 deletion docs/uploader/aws-s3-multipart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
19 changes: 11 additions & 8 deletions packages/@uppy/aws-s3/src/HTTPCommunicationQueue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ export class HTTPCommunicationQueue<M extends Meta, B extends Body> {
file: UppyFile<M, B>,
chunk: Chunk,
signal?: AbortSignal,
): Promise<UploadPartBytesResult & B> {
) {
const {
method = 'POST',
url,
Expand All @@ -252,7 +252,7 @@ export class HTTPCommunicationQueue<M extends Meta, B extends Body> {
signal,
}).abortOn(signal)

let body
let body: FormData | Blob
const data = chunk.getData()
if (method.toUpperCase() === 'POST') {
const formData = new FormData()
Expand All @@ -267,21 +267,24 @@ export class HTTPCommunicationQueue<M extends Meta, B extends Body> {

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(
Expand Down
4 changes: 2 additions & 2 deletions packages/@uppy/aws-s3/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.',
Expand Down

0 comments on commit 8cb65bb

Please sign in to comment.