Search code examples
fine-uploader

Why isn't fineUploader sending an x-amz-credential property among the request conditions?


My server-side policy signing code is failing on this line:

credentialCondition = conditions[i]["x-amz-credential"];

(Note that this code is taken from the Node example authored by the FineUploader maintainer. I have only changed it by forcing it to use version 4 signing without checking for a version parameter.)

So it's looking for an x-amz-credential parameter in the request body, among the other conditions, but it isn't there. I checked the request in the dev tools and the conditions look like this:

0: {acl: "private"}
1: {bucket: "menu-translator"}
2: {Content-Type: "image/jpeg"}
3: {success_action_status: "200"}
4: {key: "4cb34913-f9dc-40db-aecc-a9fdf518a334.jpg"}
5: {x-amz-meta-qqfilename: "f86d03fb-1b62-4073-9458-17e1dfd8b3ae.jpg"}

As you can see, no credentials. Here is my client-side options code:

var uploader = new qq.s3.FineUploader({
    debug: true,
    element: document.getElementById('uploader'),
    request: {
        endpoint: 'menu-translator.s3.amazonaws.com',
        accessKey: 'mykey'
    },
    signature: {
        endpoint: '/s3signaturehandler'
    },
    iframeSupport: {
        localBlankPagePath: '/views/blankForIE9Support.html'
    },
    cors: {
        expected: true,
        sendCredentials: true
    },
    uploadSuccess: {
        endpoint: 'success.html'
    }
});

What am I missing here?


Solution

  • I fixed this by altering my options code in one small way:

    signature: {
        endpoint: '/s3signaturehandler',
        version: 4
    },
    

    I specified version: 4 in the signature section. Not that this is documented anywhere, but apparently the client-side code uses this as a flag for whether or not to send along the key information needed by the server.