Task
Загрузите файл в Azure Blob Storage
с исходным именем файла и также назначьте имя файла как meta-data
в CloudBlob
Проблема
Эти символы недопустимы в meta-data
, но приемлемы как имя blob
:
š Š ñ Ñ ç Ç ÿ Ÿ ž Ž Ð œ Œ « » éèëêð ÉÈËÊ àâä ÀÁÂÃÄÅ àáâãäå ÙÚÛÜ ùúûüµ òóôõöø ÒÓÔÕÖØ ìíîï ÌÍÎÏ
Вопрос
- Есть ли способ сохранить эти символы в
meta-data
? Не хватает ли некоторых параметров, вызывающих это исключение? - Большинство этих символов являются стандартными глифами на некоторых языках, поэтому как их обрабатывать?
- Есть ли какая-либо документация, которая дает советы по этой проблеме? Я нашел соглашения об именах
blob
иmeta-data
, но ни о каких самих данных!
код
var dirtyFileName = file.FileName;
var normalizedFileName = file.FileName.CleanOffDiacriticAndNonASCII();
// Blob name accepts almost characters that are acceptable as filenames in Windows
var blob = container.GetBlobReference(dirtyFileName);
//Upload content to the blob, which will create the blob if it does not already exist.
blob.Metadata["FileName"] = normalizedFileName;
blob.Attributes.Properties.ContentType = file.ContentType;
// ERROR: Occurs here!
blob.UploadFromStream(file.InputStream);
blob.SetMetadata();
blob.SetProperties();
Error
Ссылки
- Именование и ссылка на контейнеры, Blobs и метаданные
- Как поддерживать другие языки в хранилище Azure blob?
- Как удалить диакритические символы (акценты) из строки в .NET?
- Azure CloudBlob SetMetadata завершается с ошибкой: "Указанные метаданные недействительны. У него есть символы, которые не разрешены" .
- Замена символов на С# (ascii)
Обходные
Незаконные символы в имени файла - это только верхушка льда, увеличенная только для цели этого вопроса! Большая картина состоит в том, что мы индексируем эти файлы с помощью Lucene.net
, и поэтому для этого нужно много meta-data
для хранения на blob
. Пожалуйста, не предлагайте хранить все отдельно в базе данных, просто не делайте этого! До сих пор нам повезло, что мы встретили только один файл с диакритическими символами!
Итак, на данный момент мы прилагаем усилия, чтобы избежать сохранения имени файла в meta-data
в качестве обходного пути!