发布至Azure Function后读取Blob容器时出现“系统找不到指定文件”错误
以下是针对该问题的排查和解决方向:
检查Blob名称的大小写一致性
Azure Blob存储的名称是区分大小写的,但本地开发环境(Windows系统)通常不区分大小写。如果本地测试时使用的文件名大小写与云端Blob实际名称不符,部署到Azure Function后就会触发找不到文件的错误。建议直接从Azure存储账户门户复制Blob的完整名称到代码中。迁移至最新的Azure Blob存储SDK
你当前使用的CloudStorageAccount属于旧版的Microsoft.Azure.Storage.BlobSDK,该版本已不再主动维护,可能存在部署后的兼容性问题。推荐使用新版Azure.Storage.BlobsSDK,同时结合托管标识无需存储密钥,代码示例如下:
using Azure.Identity; using Azure.Storage.Blobs; // 初始化Blob服务客户端(托管标识自动鉴权) var blobServiceClient = new BlobServiceClient( new Uri("https://<你的存储账户名>.blob.core.windows.net"), new DefaultAzureCredential()); // 获取容器和Blob客户端 var containerClient = blobServiceClient.GetBlobContainerClient(containerName); var blobClient = containerClient.GetBlobClient(filename);
验证Blob路径的准确性
如果文件名包含层级路径(例如docs/report.pdf),需确保代码中的filename与云端Blob的完整路径完全一致,避免多斜杠、少斜杠或路径分隔符错误(Azure Blob统一使用正斜杠/)。确认Blob的实际存在性
即使能读取容器内的文件名列表,也可能存在缓存或名称匹配误差。直接登录Azure存储账户门户,在对应容器内搜索目标Blob,确认其名称、路径与代码中使用的完全一致。排查后续代码的本地文件操作
如果在获取Blob引用后有下载到本地临时目录的操作,需确保Azure Function拥有临时目录(%TEMP%或/tmp)的读写权限。虽然当前给出的代码仅获取引用,但后续操作可能触发文件系统权限问题。
内容的提问来源于stack exchange,提问作者Michael Staig

