Загрузка изображений Amazon S3 во Flex с временными / подписанными URL - PullRequest
1 голос
/ 12 мая 2010

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

Я пробовал image.source = signatureURL, image.load (signatureURL) и т. Д. Если я пытаюсь загрузить файл с помощью URLLoader / URLStream, похоже, что я получаю данные в порядке, но я не уверен как перевести эти результаты в элемент управления изображения.

Это просто проблема с тем, что элемент управления Image не может распознать подписанные URL-адреса? Нужно ли загружать изображение из байтового массива? Как это будет выглядеть?

1 Ответ

1 голос
/ 12 мая 2010

Это оказалось проблемой в элементе управления Flex mx.Image: когда вы назначаете ему URL-адрес в качестве источника, он выполняет некоторое внутреннее декодирование / кодирование URL-адреса, которое может испортить подпись, если вы ее уже закодировали.

Например, мы создаем временный подписанный URL-адрес как этот (взято из as3awss3lib)

url = "http://" + AMAZON_ENDPOINT + "/" + escape(bucketName) + "/" + escape(objectName) + "?AWSAccessKeyId="+this.accessKey+"&Expires="+s+"&Signature="+encodeURIComponent(authString);

Этот URL будет работать, но при назначении его для Image.source базовый SWFLoader имеет внутреннюю функцию OSToPlayerURI (url), которая нарушает сигнатуру.

(ПРИМЕЧАНИЕ. Создание временного URL-адреса без кодирования authString означает, что он потерпит неудачу половину времени, в зависимости от символов сгенерированной подписи - уже пробовал)

Существует надежное (я думаю) исправление, и оно заключается в использовании URL-адреса со знаком для загрузки изображения в байтовый массив с помощью URLStream, а затем в качестве источника mx.Image назначьте ByteArray.

Я создал класс, который инкапсулирует это: S3Image.as

Надеюсь, это кому-нибудь поможет, это было сложно определить, насколько я могу судить, без документов.

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