无法将XML内容保存至Azure Blob,代码执行无效果
问题排查与修正方案
你代码里有几个关键错误导致Blob文件未生成,逐个修正即可:
1. 容器名称参数错误
containerName应该只用容器的纯名称(比如"container_name"),而不是完整的Blob容器URL。因为BlobServiceClient已经通过连接字符串关联了存储账户,GetBlobContainerClient只需要容器名即可。
2. Blob路径拼接错误
创建BlobClient时,不需要拼接containerName——containerClient已经指向目标容器,直接传入Blob的相对路径即可。另外原FileName开头的斜杠/可以去掉,避免路径冗余。
3. MemoryStream位置未重置
用MemoryStream上传时,写入数据后流的Position会停在末尾,必须重置到起始位置(Position = 0),否则上传的是空内容。
4. 确保异步调用正确等待
调用Await blobClient.UploadAsync的方法必须标记为Async,否则异步操作可能还没完成就提前结束了。
修正后的完整代码(内存流上传)
Dim connectionString As String = "Azure_Connection_String" ' 只保留容器纯名称 Dim containerName As String = "container_name" ' 直接用Blob相对路径,去掉开头斜杠 Dim blobPath As String = "site/business/data.xml" Dim blobServiceClient As BlobServiceClient = New BlobServiceClient(connectionString) Dim containerClient As BlobContainerClient = blobServiceClient.GetBlobContainerClient(containerName) containerClient.CreateIfNotExists() containerClient.SetAccessPolicy(PublicAccessType.BlobContainer) ' 直接传入Blob相对路径创建客户端 Dim blobClient As BlobClient = containerClient.GetBlobClient(blobPath) ' 处理MemoryStream,重置位置到起始点 Dim memStream As New IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(data)) memStream.Position = 0 ' 关键:必须重置流位置 Await blobClient.UploadAsync(memStream, overwrite:=True) ' 开启覆盖,避免重复上传报错
本地文件上传的修正版本
如果用本地文件流上传,同样要确保Blob路径正确:
Dim connectionString As String = "Azure_Connection_String" Dim containerName As String = "container_name" Dim blobPath As String = "site/business/data.xml" Dim blobServiceClient As BlobServiceClient = New BlobServiceClient(connectionString) Dim containerClient As BlobContainerClient = blobServiceClient.GetBlobContainerClient(containerName) containerClient.CreateIfNotExists() Dim blobClient As BlobClient = containerClient.GetBlobClient(blobPath) Using uploadFileStream = New IO.FileStream(path, IO.FileMode.Open, IO.FileAccess.Read) Await blobClient.UploadAsync(uploadFileStream, overwrite:=True) End Using
修正后执行代码,就能在容器中看到site/business/data.xml路径的文件了。
内容的提问来源于stack exchange,提问作者Ris
相关产品推荐
相关产品推荐

