Как я могу Base64 кодировать строку в сценарии события Deployd?

Я использую Deployd для создания API, который будет использоваться приложением AngularJS. Я пытаюсь интегрировать модуль ng-s3upload для сохранения некоторых изображений на Amazon S3. Модуль ng-s3upload требует, чтобы внутренний сервер, в данном случае развернутый, генерировал политику в кодировке Base64. Я создал событие GET для создания политики, но не понял, как я могу кодировать его в Base64 в сценарии события Deployd. Любая помощь или идеи приветствуются. Я пытался использовать функцию буфера NodeJS, Deployd основан на Node, но он недоступен из среды сценария события.


person tatsuhirosatou    schedule 09.03.2014    source источник


Ответы (3)


Вы можете использовать функцию btoa() для кодирования строк в формате base64.

var encodedStr = btoa(originalString);

ОТРЕДАКТИРОВАНО Поскольку вы говорите, что не можете использовать btoa, я написал реализацию функции кодирования base64. Вы используете его так:

var base64str = str.toBase64();

Вот код, вы можете увидеть его в действии в этом jsfiddle.

var code = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
            'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
            'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
            'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
            '8', '9', '+', '/'];

String.prototype.padLeft = function(desiredLength, padChar) {
    if (this.length >= desiredLength) return this; 
    var count = desiredLength - this.length;
    var result = '';
    while(count--)
        result += padChar;
    return result + this;
};

function getBinaryString(str) {
    var binaryStr = '';
    for (var i = 0; i < str.length; i++) {
        binaryStr += str.charCodeAt(i).toString(2).padLeft(8, '0');
    }
    return binaryStr;
}

function getBase64FromBinaryString(binaryStr) {
    var padRightCount = binaryStr.length % 3;
    var numChars = binaryStr.length / 6;
    var maxChars = numChars - padRightCount;
    while (padRightCount--) binaryStr += '00000000';

    var result = '';
    for (var i = 0; i < numChars; i++) {
        var pos = i * 6;
        result += code[parseInt(binaryStr.substr(pos, 6), 2)];
    }

    for (var i = 0; i < (numChars - maxChars); i++)
        result += '=';

    return result;
}

String.prototype.toBase64 = function() {
    var binaryStr = getBinaryString(this);
    return getBase64FromBinaryString(binaryStr);
}
person Oscar Paz    schedule 09.03.2014
comment
К сожалению, btoa недоступен из сценариев событий Deployd. ReferenceError: btoa is not defined - person tatsuhirosatou; 09.03.2014
comment
хм, единственный способ - написать свою собственную функцию кодирования/декодирования base64... - person Oscar Paz; 09.03.2014

Попробуйте toString('base64');

var encodedPolicy = new Buffer(policy).toString('base64');
person palanik    schedule 09.03.2014

Для использования нод-библиотек с развернутым скриптом события необходимо добавить плагины: dpd-event и dpd-event-extension.

  • Перейдите в каталог вашего приложения.

  • $ npm установить btoa

  • а затем в ресурсе события импортируйте его:

    вар btoa = требуется ('btoa');

person SafaOrhan    schedule 07.10.2016