Загрузка файла S3 Force с NodeJS - PullRequest
       7

Загрузка файла S3 Force с NodeJS

0 голосов
/ 11 ноября 2011

Я пытаюсь принудительно загрузить файлы из Amazon S3 с помощью параметра запроса GET response-content-disposition.

Сначала я создал подписанный URL, который отлично работает, когда я хочу просмотреть файл.

Затем я пытаюсь перенаправить туда с заголовком response-content-disposition.Вот мой код:

res.writeHead(302, {
  'response-content-disposition': 'attachment',
  'Location': 'http://s3-eu-west-1.amazonaws.com/mybucket/test/myfile.txt?Expires=1501018110&AWSAccessKeyId=XXXXXX&Signature=XXXXX',
});

Однако, это просто перенаправляет в файл и не загружает его.

Также, когда я пытаюсь посетить файл с response-content-disposition как GETпеременная:

http://s3-eu-west-1.amazonaws.com/mybucket/test/myfile.txt?Expires=1501018110&AWSAccessKeyId=XXXXXX&Signature=XXXXX&response-content-disposition=attachment

.. Я получаю следующий ответ:

The request signature we calculated does not match the signature you provided. Check your key and signing method.

Ответы [ 2 ]

0 голосов
/ 25 июля 2017

Привет, вы можете принудительно загрузить файл или изменить имя файла, используя приведенный ниже пример кода. Этот пример кода предназначен для загрузки файла с использованием preSignedUrl.

Здесь важен ключ ResponseContentDisposition в параметрах метода getSignedUrl. Нет необходимости передавать какой-либо заголовок в вашем запросе, например, content-disposition ..

var aws = require('aws-sdk');

var s3 = new aws.S3();
exports.handler = function (event, context) {
    var params = {
        Bucket: event.bucket,
        Key: event.key,
        ResponseContentDisposition :'attachment;filename=' + 'myprefix' + event.key
    };
    s3.getSignedUrl('getObject', params, function (err, url) {
        if (err) {
            console.log(JSON.stringify(err));
            context.fail(err);
        }
        else {
            context.succeed(url);
        }
    });
};
0 голосов
/ 11 ноября 2011

Правильный способ использования опции response-content-disposition состоит в том, чтобы включить ее как переменную GET, но вы неправильно вычисляете подпись.

Дополнительную информацию о том, как рассчитывать подпись, можно найти в Руководстве по аутентификации Amazon REST

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...