Правильный способ избежать имени большого двоичного объекта службы хранилища Azure

Я загружаю файлы из систем Windows в большие двоичные объекты хранилища Azure

Имена локальных файлов могут содержать символы, недопустимые в именах больших двоичных объектов.

Мне нужен способ кодирования этих имен, чтобы выполнить требования, установленные MSDN для имен хранилищ BLOB-объектов, как показано ниже.

Имя большого двоичного объекта должно соответствовать следующим правилам именования:

  • Имя большого двоичного объекта может содержать любую комбинацию символов.
  • Имя большого двоичного объекта должно состоять не менее чем из одного символа и не может превышать 1024 символа.
  • Имена BLOB-объектов чувствительны к регистру.
  • Зарезервированные символы URL-адреса должны быть правильно экранированы.
  • Количество сегментов пути, составляющих имя большого двоичного объекта, не может превышать 254. Сегмент пути - это строка между последовательными символами-разделителями (например, косая черта '/'), которая соответствует имени виртуального каталога.

Соответствующая информация выше: «Зарезервированные символы URL-адреса должны быть правильно экранированы». Однако какой метод является «стандартным»?


person TheGeneral    schedule 26.01.2015    source источник
comment
Почти во всех своих проектах я использую GUID для имени большого двоичного объекта (с его исходным именем ext) и сопоставляю его исходное имя в таблице, базе данных SQL или в метаданных большого двоичного объекта. Вы обдумывали это решение? Лично я думал, что это лучше, чем использовать имя файла на стороне клиента напрямую, поскольку это дает нам большую гибкость.   -  person Shaun Xu    schedule 26.01.2015
comment
Для другого проекта мы делаем это, и он работает хорошо, однако этот связан с выделенной сокращенной рабочей ролью ftp-сервера, и мне как бы нужно сохранить имена нетронутыми, в этом случае уместно экранирование   -  person TheGeneral    schedule 26.01.2015
comment
Спасибо за ваше разъяснение. Так что это еще один случай, пожалуйста, не обращайте внимания на мой «не по теме» комментарий ниже.   -  person Shaun Xu    schedule 26.01.2015
comment
Вы используете клиентскую библиотеку хранилища или написали собственный код для загрузки, используя REST API?   -  person Gaurav Mantri    schedule 26.01.2015
comment
Клиентская библиотека хранилища @GauravMantri   -  person TheGeneral    schedule 26.01.2015
comment
Если вы используете клиентскую библиотеку хранилища, я не думаю, что вы многое сможете сделать. Внутри библиотека выполняет кодирование URL-адресов, и вам придется с этим смириться. Если вы закодируете имя большого двоичного объекта, а затем отправите его в библиотеку, он закодирует его снова, и, следовательно, ваше имя большого двоичного объекта будет неверным.   -  person Gaurav Mantri    schedule 26.01.2015


Ответы (1)


Вы можете использовать Uri.EscapeUriString(yourStringToEscape)

См. здесь

Остальные вам все равно придется делать вручную, например, отрезки длины и пути и т. Д.

person Madushan    schedule 16.05.2020