Мы находимся в процессе переноса локального приложения в облако Azure. Внутренние корпоративные пользователи регулярно загружают полноразмерные изображения через интерфейс администратора на наш веб-сайт (теперь они будут отправляться в хранилище BLOB-объектов Azure). Сайт отвечает за создание правильных размеров изображений, когда они запрашиваются. Итак, что происходит сейчас (в исходной среде) это:
1) Пользователь загружает файл в полном размере.
2) Когда меньшая версия запрашивается через обработчик HTTP GetImage (т. Е. http://www.site.com/GetImage.aspx?imageid=15&height=100&width=100), обработчик проверяет, не создали ли мы ранее версию этого изображения с таким размером. Если это так, он записывает ее непосредственно в поток ответа. Если нет, то для его изменения требуется секунда, сохраните его в каталоге «/ iamges / cache» и запишите измененное изображение в поток ответа.
3) В следующий раз, когда этот файл запрашивается в таком размере, он возвращает ранее созданное изображение.
Итак, я хочу реализовать механизм того же типа, используя хранилище Azure и Blob, но у меня есть пара проблем:
1) Я не могу просто проверить, существует ли капля. Сначала я должен загрузить большой двоичный объект, а затем вызвать FetchAttributes, чтобы увидеть, вызывает ли оно исключение. Тем не менее, делая это на самом деле загружает изображение. Так разве это не удваивает количество запросов на изображения (один, чтобы увидеть, существует ли он, и другой, чтобы показать пользователю)?
2) Допустим, изображение не существует в нужном мне размере (то есть блоб /images/cache/image_15_100_100.jpg не существует - id # 15, 100x100 пикселей). Поэтому я однажды отправил запрос в CDN, чтобы проверить, существует ли он. Теперь я должен загрузить, возможно, 5-10 МБ полноразмерное изображение (в отличие от быстрого считывания с нашей локальной файловой системы), загрузить 5-10 МБ в память, изменить его размер и повторно загрузить в CDN. Это кажется трудоемким, особенно когда у меня может быть 10-15 таких изображений на один запрос.
Я знаю, что Azure является относительно новым, но есть ли что-нибудь близкое к "наилучшей практике" для такого типа взаимодействия с хранилищем больших двоичных объектов? Есть ли другой подход, который я мог бы рассмотреть? Кажется, это слишком много для изменения размера изображения, поэтому я полагаю, что я что-то упустил или пропустил другое решение.