S3 кодирует URL-адреса с пробелами и символами в неизвестный формат - PullRequest
0 голосов
/ 09 июля 2020

У меня есть ведро S3 со stati c хостинг веб-сайтов

S3 кодирует маршрут

/AniketFuryRocks/What is Lorem Ipsum?

для маршрута

/AniketFuryRocks/What+is+Lorem+Ipsum%3F

вместо маршрута

/AniketFuryRocks/What%20is%20Lorem%20Ipsum?

Эта кодировка URL приводит к ошибке 404.

Я пытался сохранить маршрут объекта как в кодированном, так и в декодированном виде.

При сохранении объекта S3 с использованием javascript encodeUri() функция. Пути с пробелами работают, но пути с такими символами, как ?, не работают.

Я заметил, что браузер запрашивает ?, а s3 ожидает %3F в конце строки

1 Ответ

0 голосов
/ 10 июля 2020

Получается, что вам нужно закодировать символы в URL

Я сделал S3Encode , npm репозиторий для того же

Вот функция, которая делает задание

function encode(filename) {
    const encodings = {
        '\+': "%2B",
        '\!': "%21",
        '\"': "%22",
        '\#': "%23",
        '\$': "%24",
        '\&': "%26",
        '\'': "%27",
        '\(': "%28",
        '\)': "%29",
        '\*': "%2A",
        '\,': "%2C",
        '\:': "%3A",
        '\;': "%3B",
        '\=': "%3D",
        '\?': "%3F",
        '\@': "%40",
    };

    return filename.replace(
        /([+!"#$&'()*+,:;=?@])/img,
        match => encodings[match]
    );
}

Используйте эту функцию в тегах anchor и связанных с ним

например,

<a href=encode("/AniketFuryRocks/What is Lorem Ipsum?")></a>
...