我正在開發(fā)一個 Java 應用程序,它使用 Account SAS(共享訪問簽名)URI 執(zhí)行以下方法:CLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();container.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()但是,我找不到生成單個帳戶 SAS 來支持上面列出的所有方法的方法。使用 SharedAccessAccountResourceType.OBJECT 生成的帳戶 SAS:執(zhí)行成功:CLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();失敗并顯示錯誤代碼:AuthorizationResourceTypeMismatchcontainer.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()使用 SharedAccessAccountResourceType.CONTAINER 生成的帳戶 SAS:執(zhí)行成功:container.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()失敗并顯示錯誤代碼:AuthorizationResourceTypeMismatchCLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();使用 SharedAccessAccountResourceType.SERVICE 生成的帳戶 SAS 失敗并顯示錯誤代碼:上述所有方法的 AuthorizationResourceTypeMismatch。有什么方法可以生成適用于以下所有方法的單個帳戶 SAS?CLoudBlockBlob blob = container.getBlockBlobReference("tmp/test.json");blob.exists();blob.openInputStream();blob.delete();container.exists();container.listBlobs().iterator().next();container.getDirectoryReference("tmp/").listBlobs().iterator().next()
3 回答

holdtom
TA貢獻1805條經驗 獲得超10個贊
設置兩種資源類型解決了這個問題:
sasAccountPolicy.setResourceTypes(EnumSet.of(SharedAccessAccountResourceType.OBJECT, SharedAccessAccountResourceType.CONTAINER));
(我正在開發(fā)的應用程序還必須生成 SAS URI。)
謝謝。

慕妹3242003
TA貢獻1824條經驗 獲得超6個贊
對于listing blobs
blob 容器,您需要設置resource type
為Container
. 您需要的許可是List
.
對于checking if blob exists
,您需要設置resource type
為Object
。您需要的許可是Read
.
對于deleting blob
,您需要將權限設置為Delete
。資源類型仍為Object
.
由于您只使用 Blob 存儲,因此service type
將只是Blob
.
總結一下:
服務類型:Blob
資源類型:容器(用于列出 blob)和對象(用于檢查 blob 的存在和刪除 blob)
權限:列出、讀取和刪除
有了這個,你應該能夠實現你的目標。
添加回答
舉報
0/150
提交
取消