Прямая загрузка из браузера на S3 с помощью Meteor, jQuery и AWS SDK

Я попал почти в каждый ресурс по этой теме, но все еще нуждаюсь в вашей помощи, чтобы сделать эту работу. Я хочу напрямую загружать файлы на мой S3 прямо из браузера в моем приложении Meteor. Для этого я предоставляю подписанный URL-адрес клиенту, как в этом упрощенном примере:

Meteor.methods({
    requestUpload: function(filename) {
        var fut = new Future();
        new Fiber(function() {
            var params = {
                Bucket: MY_BUCKET,
                Key: new Date().getTime() + "_" + filename
            };
            var surl = s3.getSignedUrl('putObject', params, function(err, surl) {
                if (!err) {
                    console.log("signed url: " + surl);
                    fut.return(data);
                } else {
                    console.log("Error signing url " + err);
                    fut.return();
                }
            });
        }).run();
        return fut.wait();
    }
}

Затем клиент вызывает этот метод, получает подписанный URL-адрес, который выглядит следующим образом

https://mybucket.s3-eu-west-1.amazonaws.com/1382890365957_myfile.png?AWSAccessKeyId=AKBLABLA&Expires=1382891265&Signature=BLABLA

и пытается загрузить файл с запросом POST, используя jQuery, как в следующем фрагменте:

Template.form.events({
    'submit form': function(e, t) {
        e.preventDefault();
        var fileInput = t.find("input[type=file]");
        for (var i = 0; i < fileInput.files.length; i++) {
            var file = fileInput.files[i];
            Meteor.call("requestUpload", file.name, function(err, surl) {
                if (!err) {
                    console.log("signed url: " + surl);
                    var reader = new FileReader();
                    reader.onload = function(event) {

                    // Here I am trying to upload, it fails
                        $.post(surl, reader.result, function(data, status) {
                            console.log("status: " + status);
                            console.log("data: " + data);
                        });
                    };
                    reader.readAsDataURL(file);
                } else {
                    console.log(err);
                }
            });
        }
    }
});

Я хочу использовать JQuery, потому что я этоВозможно, это хороший способ охватить множество браузеров и версий браузеров. Я также проверил свою конфигурацию CORS для этого конкретного сегмента, это выглядит так:



    
        *
        POST
        PUT
        3000
        *
    

Учетные данные, с которыми я настраиваю свой SDK на сервере, в порядке, у них есть права администратора, и я все время их использую для размещения и получения объектов в S3 с сервера. Кроме того, если я подписываю URL для вызова GET в личном файле, подписанный URL действителен. Возможно, я делаю что-то не так с почтовым звонком.

Любая помощь очень ценится!

Ответы на вопрос(3)

Ваш ответ на вопрос