Хранилище BLOB-объектов Azure - управление именем при загрузке ресурса

У нас есть тысячи файлов для хранения в хранилище BLOB-объектов Azure. Эти файлы могут быть любого типа, но наиболее распространены файлы PDF, изображения и Excel. Используя URI большого двоичного объекта в теге привязки, пользователь нашей системы может загрузить файл прямо из Azure на компьютер пользователя. Все хорошо.

Мы хотели бы, чтобы имя большого двоичного объекта было именем самого файла, поэтому, когда пользователь загружает файл, исходное имя файла остается неизменным. Однако мы должны учитывать неизбежные конфликты файлов в контейнере. Использование идентификаторов GUID для имени большого двоичного объекта - это работоспособное решение, но когда пользователь щелкает мышью, чтобы загрузить файл, он получает имя файла в виде имени большого двоичного объекта GUID (вместо исходного имени файла).

Есть ли способ использовать GUID для имени большого двоичного объекта, но когда пользователь нажимает кнопку, чтобы загрузить файл, возвращаемый файл имеет исходное имя файла? Я понимаю, что мы можем загрузить файл на наш сервер и передать пользователю файл с правильным именем, но мы пытаемся снизить нагрузку на наш веб-сервер для загрузки файлов.

Так есть ли параметр конфигурации с большим двоичным объектом, который позволит вернуть файл с правильным именем файла? Мы можем установить MIME-тип для большого двоичного объекта, и мы искали аналогичную настройку для части имени файла.


person John Livermore    schedule 10.06.2016    source источник


Ответы (1)


Есть ли способ использовать GUID для имени большого двоичного объекта, но когда пользователь щелкает, чтобы загрузить файл, возвращаемый файл имеет исходное имя файла? Я понимаю, что мы можем загрузить файл на наш сервер и передать пользователю правильно названный файл, но мы пытаемся снизить нагрузку на наш веб-сервер для загрузки файлов.

Для этого можно использовать свойство Content-Disposition большого двоичного объекта. Что вы можете сделать, так это установить имя большого двоичного объекта как GUID, однако установить свойство content-disposition большого двоичного объекта как attachment; filename="original-file-name". Если вы хотите, чтобы файл всегда загружался, вы можете установить это свойство навсегда. Однако, если вы хотите установить это имя только при загрузке файла, вы можете создать Shared Access Signature в большом двоичном объекте с разрешением Read и перезаписать этот заголовок. Я писал об этом в my blog sometime ago. Из моего сообщения в блоге:

Предположим, что вы хотите, чтобы ваши пользователи загружали файлы из вашей учетной записи хранения, но вы хотите дать этим файлам удобное имя. Кроме того, вы хотите, чтобы вашим пользователям предлагалось сохранить файл вместо того, чтобы отображать файл в самом браузере (например, файл PDF открывается автоматически только в браузере). Для этого раньше вам нужно было сначала загрузить файл из хранилища BLOB-объектов на сервер, а затем записать данные этого файла в поток ответов, установив заголовок Content-Disposition. Фактически, я потратил большую часть прошлой недели на реализацию того же решения. Только если бы я знал, что эта функция идет в хранилище :).

Теперь вам не нужно этого делать. Что вы можете сделать, так это указать свойство content-disposition для большого двоичного объекта и установить его как «вложение; filename = yourdesiredfilename », и когда ваш пользователь попытается получить к нему доступ через браузер, ему будет предложена опция загрузки файла.

Теперь вы можете спросить, а что, если у меня есть файл изображения, который я хочу также показать встроенным, а также как загружаемый элемент. Очень актуальное требование. Что ж, умники из команды хранилищ уже подумали об этом :). Вы можете не только установить content-disposition как свойство blob, но и переопределить это свойство в URL-адресе SAS (подробнее об этом чуть позже).

person Gaurav Mantri    schedule 10.06.2016