Azure Blob 存储 - sp 是必需的。不能为空
Posted
技术标签:
【中文标题】Azure Blob 存储 - sp 是必需的。不能为空【英文标题】:Azure Blob Storage - sp is mandatory. Cannot be empty 【发布时间】:2022-01-13 01:00:45 【问题描述】:尝试使用 SAS 链接将文件上传到 Azure Blob 存储时出现错误。它是一个抱怨空 sp 属性的身份验证错误。奇怪的是 Sp 元素存在于 SAS Url 中。
这不是权限问题,因为我可以使用 ADF 使用相同的 SAS URL 上传文件。
网址
BlobEndpoint=https://####.blob.core.windows.net/####?sp=racwdl&st=2021-12-08T01:14:01Z&se=2022-02-28T09:14:01Z&spr =https&sv=2020-08-04&sr=c&sig=####
错误详情
服务器未能验证请求。确保值 授权标头正确形成,包括签名。 请求ID:ed57ec28-f01e-00a9-79d2-ebcfc2000000 时间:2021-12-08T01:22:40.1147833Z 状态:403(服务器失败 验证请求。确保 Authorization 标头的值 正确形成包括签名。)错误代码: 认证失败
附加信息:AuthenticationErrorDetail:sp 是必需的。 不能为空
内容:
AuthenticationFailed
Server 未能验证请求。确保值 授权标头正确形成,包括签名。 请求ID:ed57ec28-f01e-00a9-79d2-ebcfc2000000 时间:2021-12-08T01:22:40.1147833Zsp 是强制性的。不能为空标头:x-ms-request-id:ed57ec28-f01e-00a9-79d2-ebcfc2000000 x-ms-错误代码:AuthenticationFailed 内容长度:407 内容类型:application/xml 日期:2021 年 12 月 8 日星期三 01:22:39 GMT 服务器:Microsoft-HTTPAPI/2.0
代码
Stream file = new FileStream(fileToUpload, FileMode.Open);
var blobServiceClient1 = new BlobServiceClient(endpointString);
var containerRef = blobServiceClient1.GetBlobContainerClient("dropoff-commissionstatements");
var blob1 = containerRef.GetBlobClient("TDM_FINAL_102449_13092021_COMMSTMT_AR_TAL_D95337.csv");
string file_extension = Path.GetExtension(fileToUpload);
string filename_withExtension = Path.GetFileName(fileToUpload);
blob1.Upload(file);
【问题讨论】:
【参考方案1】:请尝试将连接字符串更改为:
BlobEndpoint=https://####.blob.core.windows.net/####; SharedAccessSignature=sp=racwdl&st=2021-12-08T01:14:01Z&se=2022-02-28T09:14:01Z&spr=https&sv=2020-08-04&sr=c&sig=####
更多详情请看此链接:https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#create-a-connection-string-using-a-shared-access-signature。
【讨论】:
Gaurav - 我收到此错误 - 找不到有效的帐户信息组合。 我再次尝试通过您提供的 URL 和它现在工作。我会支持你的答案以上是关于Azure Blob 存储 - sp 是必需的。不能为空的主要内容,如果未能解决你的问题,请参考以下文章
通过直接 URL 浏览时上传到 Azure Blob 存储的图像不可用
使用 /mnt/ 将数据从 Azure Blob 存储读取到 Azure Databricks