无法上传数据至本地Blob容器,报System.IO.Exception错误求助
尝试将数据上传至本地Blob容器时触发System.IO.Exception异常,错误信息如下:
The filename, directory name, or volume label syntax is incorrect. : 'C:\repos{repository-name}{solution-name}{project-name}\bin\Debug\net6.0
后续附带了要上传的数据。
使用的代码如下:
public async Task UploadData(Data data, string currentSequenceNumber) { // The blob container exists bool exists = await BlobContainerClient.ExistsAsync(); // the blobname is 20230317142352_923.json string blobName = $"{dateTimeProvider.NowUtc:yyyyMMddHHmmss}_{currentSequenceNumber.PadLeft(3, '0')}.json"; BlobClient blobClient = BlobContainerClient .GetBlobClient(blobName); // This serialises the data as a string with length 13770 string json = JsonConvert.SerializeObject(tennetResponse, Formatting.Indented); // This throws the exception await blobClient.UploadAsync(json); }
Blob的绝对URI为http://127.0.0.1:10000/devstoreaccount1/storage/data_20230317142352_923.json。
曾尝试修改上传语句为:
await blobClient.UploadAsync(data, new BlobUploadOptions { HttpHeaders = new BlobHttpHeaders() { ContentType = MediaTypeNames.Application.Json } });
但问题依旧。通过Microsoft Azure Storage Explorer手动上传同名同内容的文件可成功。
请问该错误的原因是什么,该如何解决?
核心原因
这个异常的根源是**BlobContainerClient未正确指向Azurite的Blob服务端点**,而是错误地被配置为操作本地文件系统,导致SDK尝试将数据写入本地目录,从而触发文件路径语法错误。
解决步骤
修正
BlobContainerClient初始化逻辑
必须使用Azurite的专属连接字符串创建BlobContainerClient,而非本地文件路径。标准的Azurite连接字符串如下:DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;初始化示例:
string azuriteConnectionString = "上述连接字符串"; BlobContainerClient blobContainerClient = new BlobContainerClient(azuriteConnectionString, "storage");确认Azurite服务运行状态
确保Azurite已启动,且Blob服务监听默认端口10000。可通过Azure Storage Explorer连接Azurite,验证storage容器是否正常可访问。修正代码变量错误
代码中序列化时使用的tennetResponse与方法参数data不匹配,建议修正为JsonConvert.SerializeObject(data, Formatting.Indented),避免后续出现数据序列化错误。排除Blob名称问题
你的Blob名称20230317142352_923.json符合Azure Blob命名规范,手动上传成功也验证了这一点,无需调整名称格式。
内容的提问来源于stack exchange,提问作者user21420509

