Skip to content

S3 returns: "Invalid Policy: Invalid Simple-Condition: value must be a string." when trying to upload #10

Description

@mvandoff

I'm hitting an error when using uploadOne. I get a 400 Bad Request error from S3:

<Error>
<Code>
InvalidPolicyDocument
</Code>
<Message>
Invalid Policy: Invalid Simple-Condition: value must be a string.
</Message>
...

Im trying to upload a single part file. The initiated upload seems to be well formed from the server:

{
    "uploadId": "da803810-2939-4498-a5e9-95b00e6f533f",
    "uploadType": "PROJECT_FILES",
    "uploadMode": "Single",
    "bucket": "syfr-dev",
    "key": "cl9rmsuoa00036e01m3rtezfi-files",
    "filename": "been-away.zip",
    "mimetype": "application/zip",
    "size": 6199034,
    "chunkSize": 6199034,
    "partsCount": 1,
    "presignedRequest": {
        "url": "https://s3.us-east-1.amazonaws.com/syfr-dev",
        "fields": [
            {
                "key": "key",
                "value": "cl9rmsuoa00036e01m3rtezfi-files"
            },
            {
                "key": "acl",
                "value": "public-read"
            },
            {
                "key": "Content-Type",
                "value": "application/zip"
            },
            {
                "key": "Content-Length",
                "value": 6199034
            },
            {
                "key": "bucket",
                "value": "syfr-dev"
            },
            {
                "key": "X-Amz-Algorithm",
                "value": "AWS4-HMAC-SHA256"
            },
            {
                "key": "X-Amz-Credential",
                "value": "AKIA3MYKFIQRRAKFPHET/20221106/us-east-1/s3/aws4_request"
            },
            {
                "key": "X-Amz-Date",
                "value": "20221106T123150Z"
            },
            {
                "key": "Policy",
                "value": "eyJleHBpcmF0aW9uIjoiMjAyMi0xMS0wNlQxMjozNjo1MFoiLCJjb25kaXRpb25zIjpbeyJrZXkiOiJjbDlybXN1b2EwMDAzNmUwMW0zcnRlemZpLWZpbGVzIn0seyJhY2wiOiJwdWJsaWMtcmVhZCJ9LHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vemlwIn0seyJDb250ZW50LUxlbmd0aCI6NjE5OTAzNH0seyJidWNrZXQiOiJzeWZyLWRldiJ9LHsiWC1BbXotQWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsiWC1BbXotQ3JlZGVudGlhbCI6IkFLSUEzTVlLRklRUlJBS0ZQSEVULzIwMjIxMTA2L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSx7IlgtQW16LURhdGUiOiIyMDIyMTEwNlQxMjMxNTBaIn1dfQ=="
            },
            {
                "key": "X-Amz-Signature",
                "value": "3e9f2979a4fad293f8765dbe2f36427b52a0cf060a77cfcf9e9d56925928dbc2"
            }
        ]
    }
}

I'm using initiateOne to initialize the upload on the server.

upload module on server:

const uploadModule = setupUploadModule({
	s3Config: {
		credentials: {
			accessKeyId: env.AWS_ACCESS_KEY_ID,
			secretAccessKey: env.AWS_SECRET_ACCESS_KEY_ID,
		},
		domain: 'amazonaws.com',
		region: env.AWS_REGION,
	},

	// Setting the multipart chunk size (defaults to 5MiB)
	multipartChunkSize: MULTIPART_CHUNK_SIZE,

	// Here define a condition where deletion is allowed to avoid data loss for example
	canDelete: process.env.NODE_ENV === 'production',
	uploads: {
		[UploadType.PROJECT_FILES]: {
			bucket: env.AWS_BUCKET_NAME,
			mode: UploadMode.Single,
			buildKey: (file: FileToUpload, ctx: { trackId: string }) => {
				return `${ctx.trackId}-files`;
			},
			mimeTypesConfig: [{ types: 'application/zip', maxSize: 107_374_182_400 }],
		},
	},
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions