Yandex Object Storage — реализация SignedURL для загрузки данных в bucket на NodeJS
Несколько лет назад, я участвовал в разработке одного проекта, и как задачу, мне (тогда еще зеленому джуну) поставили реализовать систему загрузки медиа файлов на AWS S3. Важным условием было реализовать конкретно SignedURL.
Спустя несколько лет, я опять столкнулся с такой же задачей, но заказчик настаивал на отечественном облачном хранилище.
Ниже я немного расскажу что вообще такое подписанные ссылки, как перейти на Yandex Object Storage(YOS), и почему YOS и AWS S3 — это одно и то же!
Оптимизация клиент/сервера при работе с бинарными файлами
Что за такие подписанные ссылки?
Это URL, содержащий данные для авторизации запроса в своих параметрах.
То бишь, отправляя любой бинарный файл по определенной ссылке, он автоматически будет загружен в облако после валидации параметров из url.
В чем же преимущество?
В случае классической архитектуры, пользователь, загружает файл сперва на клиент, далее клиент отправляет запрос с файлом в body на сервер, и только после это сервер отправляет тот же файл в облако.
Получается что один файл мы загружаем из одного элемента структуры в другой 3 раза.
Конечно если файл маленький по объему — то простоя не будет, да и сервер сильно нагружаться не будет.
Но что если это длинное видео, в хорошем разрешении.
В случае же подписанных ссылок, файл загружается напрямую с клиента на облако, обходя сервер.
Соответственно получается так, что загрузка проходит всего 2 раза от пользователя на клиент, и с клиента в облако. Сокращаем время работы 1 операции в +- 1.5 раза.
Yandex Object Storage
Начал я работу над задачей собственно с регистрации на Yandex Cloud, слава, что концепция такая же что и у AWS.

- Регистрация на Yandex Cloud.
- Создание отдельного облака.
- Добавляем «Сервисный аккаунт» — проще говоря цифровой пользователь, содержащий статический и приватный ключи доступа. Для сервисного аккаунта можно указать его роли в каталоге, разделяя таким образом области доступа при работе с YOS.
Важно: Не забудьте после создания сервисного аккаунта добавить ему статический ключ доступа и сохранить их!

- Далее само хранилище (bucket)

На этом считайте что работа с сайтом закончена, дальше будет код, код и еще раз код.
AWS SDK и Yandex Object Storage
Думая над технической реализацией я прикинул, что суть подписанных url от места хранения не меняется. И ведь прав был, посмотрев в документации AWS S3 и YOS как генерируется ссылка отличий я не заметил.
Тут и было принято решение использовать уже знакомый мне SDK для NodeJS от Амазона.
- Инициализировал AWS, все ключи прописал в .env, а регион у яндекса всего 1 — ru-central1
import AWS from 'aws-sdk'; import < AWS_REGION, AWS_USER_KEY, AWS_USER_SECRET_KEY >from '../../config'; const accessKeyId = AWS_USER_KEY; const secretAccessKey = AWS_USER_SECRET_KEY; AWS.config.update(< region: AWS_REGION, accessKeyId, secretAccessKey >); export default AWS;
- После собственно, создаем сервис для работы с API
const client = new aws.S3(< endpoint: 'https://storage.yandexcloud.net', >);
- В задаче стоит необходимость получать подписанную ссылку, по которой клиент сможет загрузить файл в облако, это и реализовал.
export const getSignedUrl = async (< type >: GetSignedUrlInput): Promise => < const action = 'putObject'; let objectKey = cuid(); let params = < Bucket: AWS_BUCKET_NAME, Key: `$.$`, ContentType: type, Expires: Number(SIGN_URL_EXPIRES), ACL: 'public-read', >; const signedURL: string = await new Promise((resolve, reject) => < client.getSignedUrl(action, params, (err, url) => < if (err) < reject(err); >else < resolve(url); >>); >); return < signedURL, objectURL: `https://$.storage.yandexcloud.net/$`, expensive: params.Expires >; >;
Теперь поясню что тут происходит:
- Создаем функцию, которую будем вызывать в последствии для получения ссылки, что в нее передавать — ваше решение, мне хватило только типа загружаемого файла. Возвращать собственно нужно как минимум подписанную ссылку
- Далее я создаю объект с параметрами, по которым будет строиться ссылка, из важных только Bucket и Key, остальные поля опциональны
- По объекту параметров генерируем ссылку с помощью функции из AWS SDK.
- PROFIT. Все готово)
Теперь что касается клиентской части.
Ссылка содержит в себе все необходимы headers для успешной аутентификации.
Стоит заметить что тип запроса при отправке на YOS должен быть PUT, информации про это в документации я не нашел, а вот у AWS S3 тип запроса POST.
Заключение
Это моя первая статья, еще утром я и не думал её писать, а вечером вышло это.
Для чего я это написал? Просто что бы помочь тем кто столкнется с такой задачей, ибо информации по использованию YOS на NodeJS мало, и той что помогла бы мне я не нашел.
Всем спасибо кто дочитал до этого момента!
Как добавить точку на Яндекс.Карты
Используя сервис «Яндекс.Карты», вы можете создать интерактивную карту для своего сайта и поставить на ней несколько точек с индивидуальной информацией в каждой точке. Вы можете разместить точки на Яндекс.Карте бесплатно.
Видео: как отметить точки на Яндекс.Карте
Для работы с конструктором у вас должен быть предварительно создан аккаунт на Yandex.ru, который позволит добавлять и хранить карты в профиле для дальнейшей корректировки, и добавить на карту метку по клику.
Как создать новую карту и добавить объект на Яндекс.Карту бесплатно
Авторизуйтесь в сервисе «Яндекс» и перейдите в конструктор по адресу:
https://tech.yandex.ru/maps/tools/constructor/
Во всплывающем окне нажмите — «Создать карту».

Далее, чтобы создать точку и добавить здание на Яндекс.Картах (разместить адрес на карте), в строке поиска введите адрес местоположения вашей организации — и нажмите кнопку «Найти».

Далее, чтобы добавить местоположение в Яндекс.Картах, используйте встроенные инструменты для подготовки изображения:
- измените масштаб
- в форме описания, добавьте название, адрес и контактную информацию компании
- измените цвет и тип маркера при необходимости
После внесения изменений, нажмите кнопку «Готово», чтобы добавить метку вашей организации на Яндекс.Карту.

Установка нескольких точек на карте
После внесения информации в описание, при необходимости вы можете добавить несколько меток на Яндекс.Карте. Для этого, перейдите во вкладку «Метки», и приступайте к установке точек в необходимых местах, путём нажатия левой клавиши мыши. Напомним, что вы можете добавить точку, или несколько, на карту Яндекс бесплатно.
Примечание: для каждой точки можно установить описание, цвет и тип для их различия.

Когда вы завершите нанесение точек на Яндекс.Карту, нажмите «Сохранить и продолжить».
Настройка размера карты
На данном этапе вам необходимо указать размер интерактивной карты, которая будет отображаться в разделе с контактной информацией.
Вы можете указать любую ширину карты в пикселях или процентах, для того, чтобы изображение выводилось в аккуратном виде, по всей ширине содержимого раздела, следует установить галочку «Растянуть по ширине», а высоту при этом рекомендуем указать в пределах 300-350 пикселях.

Примечание: мы приводим лишь пример подготовки карты для размещения на сайте, вы можете самостоятельно указать все настройки по своему усмотрению, при необходимости.
Размещение карты на странице сайта
После окончания создания и редактирования карты, получите её код для дальнейшего размещения на сайте.
Для этого, нажмите на кнопку «JavaScript».

Скопируйте код из всплывающего окна, и разместите его в форме редактирования страницы вашего сайта. Перейдите в редактирование содержимого раздела, где вы хотите разместить интерактивную карту.
Откройте HTML код страницы, кликнув по соответствующей иконке на панели инструментов.

Во всплывающем окне, необходимо разместить полученный код.

Вставьте код в конец содержимого (место размещения указано для примера — вы можете выбрать любое подходящее место в структуре страницы). Нажмите кнопку «Обновить».
После проделанных действий, нажмите кнопку «Сохранить», и проверьте вывод карты на сайте.
Теперь вы знаете, как ставить точки в Яндекс.Картах.
Скачивание файлов из Интернета
Internet Explorer 11 был окончательно отключен с помощью обновления Microsoft Edge в некоторых версиях Windows 10. Если для любого сайта, который вы посещаете, требуется Internet Explorer 11, его можно перезагрузить в режиме Internet Explorer в Microsoft Edge. Рекомендуется перейти на Microsoft Edge , чтобы начать пользоваться более быстрым, безопасным и современным браузером.
Из Интернета можно скачивать несколько типов файлов: документы, изображения, видеозаписи, приложения, в том числе расширения и панели инструментов для браузера. Если выбрать файл для скачивания, Internet Explorer спросит, что нужно сделать с этим файлом. В зависимости от типа скачиваемого файла доступны следующие варианты:
- Открыть файл для просмотра, но не сохранять на компьютере.
- Сохранить файл на компьютере в стандартной папке для скачивания. После того как Internet Explorer проверит безопасность и завершит скачивание файла, вы сможете открыть файл, открыть папку, в которой он сохранен, либо просмотреть файл в диспетчере загрузок.
- Сохранить под другим именем, с другим типом или в другой папке на компьютере.
- Выполнить приложение, расширение или файл другого типа. После того как Internet Explorer выполнит проверку безопасности, файл откроется и запустится на компьютере.
- Отменить скачивание и вернуться к просмотру веб-страниц.
На компьютере можно также сохранять файлы меньшего размера, например отдельные картинки. Для этого щелкните объект правой кнопкой мыши изображение, ссылку или файл и выберите пункт Сохранить изображение или Сохранить объект как.
Поиск скачанных файлов на компьютере
Диспетчер загрузки отслеживает изображения, документы и другие файлы, скачиваемые из Интернета. Скачанные файлы автоматически сохраняются в папке Загрузки. Эта папка обычно находится на диске, где установлена ОС Windows (например, C:\Пользователи\имя_пользователя\Загрузки). Скачанные файлы можно перемещать из папки «Загрузки» в другие папки на компьютере.
Чтобы просмотреть файлы, загруженные с помощью Internet Explorer, откройте Internet Explorer, а затем нажать кнопку Инструменты и выбрать просмотреть загрузки. Вы сможете посмотреть, что вы скачали из Интернета, где эти элементы хранятся на вашем компьютере, и выбрать действия для скачивания.
Изменение стандартной папки для скачивания на компьютере
- Откройте Internet Explorer, выберите кнопку Инструменты, а затем выберите Просмотреть загрузки.
- В диалоговом окне Загрузки представления выберите Параметры в левом нижнем поле.
- Выберите другое расположение для скачивания по умолчанию, на выбрав обзор и на выбрав ОК.
Почему некоторые файлы не открываются в Internet Explorer
Internet Explorer использует такие надстройки, как Adobe Reader, для просмотра некоторых файлов в браузере. Если файл, для которого требуется надстройка, не открывается, возможно, у вас есть более старая версия надстройки, которую необходимо обновить.
Скачивание и предупреждения системы безопасности
Во время скачивания файла Internet Explorer по ряду признаков проверяет, не представляет ли файл угрозу для компьютера. Если Internet Explorer определит скачанный файл как подозрительный, вы получите уведомление, чтобы решить, сохранять, запускать или открывать файл. Не все файлы, для которых выводится предупреждение, на самом деле опасны, но важно скачивать только действительно нужные файлы и только с надежных сайтов.
Если вы видите предупреждение системы безопасности о том, что издателю данной программы не удалось подтвердить проверку, это означает, что Internet Explorer не распознает сайт или организацию, запрашивающие скачивание файла. Перед сохранением или открытием такого файла убедитесь, что его издателю можно доверять.
Скачивание файлов из Интернета всегда сопряжено с риском. Вот некоторые меры предосторожности, которые можно предпринять для защиты компьютера при скачивании файлов:
- Установите и используйте антивирусную программу.
- Скачивайте файлы только с веб-сайтов, которым доверяете.
- Если файл имеет цифровую подпись, убедитесь, что она действительна и файл получен из надежного источника. Для просмотра цифровой подписи перейдите по ссылке издателя в диалоговом окне предупреждения о безопасности, которое отображается при первом скачивании файла.
Как скачать картинку с яндекс диска и загрузить в 1С
УТ 10.3
Всем доброго дня. Есть ссылка на картинку яндекса. Вот пример
https://yadi.sk/d/jGbwG3PGpt3am/LM0103C.jpg
Нужно скачать её на пк и желательно добавить в номенклатуру. Делал так:
SSL = Новый ЗащищенноеСоединениеOpenSSL(); СерверПриемник = "yadi.sk"; Яндекс = новый HTTPСоединение("yadi.sk". SSL); HTTPЗапрос = Новый HTTPЗапрос(LM0103C.jpg); Ответ = Яндекс.Получить(HTTPЗапрос,"D:\Картинки\LM0103C.jpg);
КопироватьФайл ( https://yadi.sk/d/jGbwG3PGpt3am/LM0103C.jpg , "D:\Картинки\LM0103C.jpg"); МояКартинка = Новый Картинка("D:\Картинки\LM0103C.jpg"); НовыйОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент(); ВыбранноеИзображение = Новый Картинка("D:\Картинки\LM0103C.jpg", Ложь); НовыйОбъект.Наименование = НашаПозиция.Код; НовыйОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение; НовыйОбъект.Хранилище = Новый ХранилищеЗначения(ВыбранноеИзображение, Новый СжатиеДанных); НовыйОбъект.Объект = НашаПозиция.Ссылка; НовыйОбъект.Записать(); // НашаПозиция.ОсновноеИзображение = НовыйОбъект;
Вообще, при сохранении картинки на диск она весит 1 Кб и её не возможно открыть.
Как скачать картнку с яндекса зная ссылку на изображение или сразу загрузить её в товар?
