чтение текстового файла AWS-усиление S3 чтения данных с заданного URL - PullRequest
0 голосов
/ 08 мая 2018

Как я могу прочитать текстовый файл в s3, используя библиотеку aws-ampify? Я могу получить предварительно назначенный URL-адрес, но при переходе по URL-адресу появляется ошибка

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>
private/xx-xxxx-4:42134231243423142131423/filename.json
</Key>
<RequestId>1242341243</RequestId>
<HostId>
 uudawfeawefhszec/6kM8VawefawefawfawefawefgwegweawgeagweyRk=
</HostId>
</Error>

Документация содержит инструкции о том, как получить URL:

Storage.get('test.txt', {level: 'private'})
  .then(result => console.log(result))
  .catch(err => console.log(err));

Результатом является URL-адрес пути, а не текст. Когда я запускаю метод http get, конечная точка не существует.

Как лучше всего извлекать данные? Я использую реагировать.

Если есть метод, такой как Storage.getText (...), это будет лучшим вариантом.

Я пытался добавить авторизацию, используя это ...

  Auth.currentCredentials()
            .then(credentials => {
                axios.get(result, { headers: { 'Authorization': JSON.stringify(Auth.essentialCredentials(credentials)) } })
                    .then(r => {

                        console.log(r);
                    })
            });

400 Неверный запрос: (

1 Ответ

0 голосов
/ 09 мая 2018

Глядя на исходный код, класс S3Image использует недокументированный параметр в методе Storage.get

Storage.get('...', {download: true}) 

- правильный способ получить объект.

Объект нужно будет декодировать

    Storage.get('modules.json', { download: true })
        .then(result => {
            console.log(Utf8ArrayToStr(result.Body));
        })
        .catch(err => {
            console.log('error axios');
            console.log(err)
        });

function Utf8ArrayToStr(array) {
    var out, i, len, c;
    var char2, char3;

    out = "";
    len = array.length;
    i = 0;
    while (i < len) {
        c = array[i++];
        switch (c >> 4) {
            case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                // 0xxxxxxx
                out += String.fromCharCode(c);
                break;
            case 12: case 13:
                // 110x xxxx   10xx xxxx
                char2 = array[i++];
                out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
                break;
            case 14:
                // 1110 xxxx  10xx xxxx  10xx xxxx
                char2 = array[i++];
                char3 = array[i++];
                out += String.fromCharCode(((c & 0x0F) << 12) |
                    ((char2 & 0x3F) << 6) |
                    ((char3 & 0x3F) << 0));
                break;
        }
    }

    return out;
}
...