2016-06-10 1 views
0

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

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

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

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

ответ

1

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

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

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

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

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