java - Azure FileShare:指定的资源不存在 - SAS 身份验证
问题描述
我正在尝试使用 Java/Scala 中的 SAS 在 Azure FileShare 下列出文件。
我无权访问存储帐户,但只有 Azure 文件存储中特定共享的 SAS 密钥。如何在 Java 中直接访问 Share?
我可以使用存储资源管理器列出共享中的目录和文件,使用 AZCopy 下载或使用带有 SAS 密钥的共享 URL 的 Rest Call。
几乎所有其他发布类似错误的人都尝试使用存储帐户密钥和 BlobStorage 进行身份验证。他们似乎可以访问共享之上的一层,即存储帐户。但我需要使用仅适用于此共享的 SAS 直接连接到 FileShare。
val storageConnectionString =
s"FileEndpoint=$endpoint;" + // https://xyz.file.core.windows.net
"SharedAccessSignature=" +
URLEncoder.encode(sas)
val storageAccount = CloudStorageAccount.parse(storageConnectionString)
val fileClient = storageAccount.createCloudFileClient()
val share = fileClient.getShareReference(fshare) //A fileshare with access
val rootDir = share.getRootDirectoryReference()
val files = rootDir.listFilesAndDirectories()
files.forEach(file => println(file.getUri)) //Error: com.microsoft.azure.storage.StorageException: The specified resource does not exist.
共享中的文件使用相同的 URI(FileShareEndpoint+"/"+fshare+"?"+sas)在 Storage Explorer 的 UI 中可见。
期望获得文件和目录列表,但出现异常:“指定的资源不存在。”。是代码还是无法通过程序连接到共享而无需首先对存储帐户进行身份验证?
解决方案
推荐阅读
- markdown - 在 Markdown 中格式化深层列表
- php - 匹配令牌及其可能重叠的上下文
- javascript - mapbox-gl-js 路线不准确
- rdf - 与“小”个体打交道的最佳方法是什么?
- c++ - 使用管道从 STDIN 读取分叉进程的问题
- php - 如何将数组添加到我的 php 变量中,循环不适用于数组
- javascript - 正则表达式匹配字符串的句子和单词
- bash - 如何在别名或函数中表达多个键值对?
- swift - 是否需要在 performBackgroundTask() 中使用 perform() 和 performAndWait(),是否可以使用?
- npm - 将 npm run build 添加到 Fortrabbit 部署过程