任务
使用原始文件名上传文件,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();
错误
参考
- 命名和引用容器、Blob 和元数据
- 如何在 Azure Blob 存储中支持其他语言?
- 如何从 .NET 中的字符串中删除变音符号(重音符号)?
- Azure CloudBlob SetMetadata 失败并显示“指定的元数据无效。它包含不允许的字符。”
- 替换 C# (ascii) 中的字符
解决方法
文件名中的非法字符只是冰山一角,仅为了这个问题而放大!更大的图景是我们使用索引这些文件Lucene.net
,因此需要大量meta-data
存储在blob
. 请不要建议将它们全部单独存储在数据库中,只是不要!到目前为止,我们很幸运只遇到了一个带有变音符号的文件!
因此,目前我们正在努力避免将文件名保存在 中meta-data
作为解决方法!