【发布时间】:2017-07-20 17:46:54
【问题描述】:
我正在创建一个应用程序,我需要在浏览器中查看 Blob,而不是下载它们。目前,具有令牌的 blob 链接会下载相应的 blob。
我在这里得到了一些参考来查看浏览器中的 blob: https://github.com/Azure-Samples/storage-blob-java-getting-started/blob/master/src/BlobBasics.java (见第 141 行)
这是我创建令牌的代码:
@Test
public String testBlobSaS(CloudBlob blob, CloudBlobContainer container) throws InvalidKeyException,
IllegalArgumentException, StorageException, URISyntaxException, InterruptedException {
SharedAccessBlobPolicy sp = createSharedAccessBlobPolicy(
EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.LIST), 100);
BlobContainerPermissions perms = new BlobContainerPermissions();
perms.getSharedAccessPolicies().put("readperm", sp);
perms.setPublicAccess(BlobContainerPublicAccessType.CONTAINER);
container.uploadPermissions(perms);
String sas = blob.generateSharedAccessSignature(sp, null);
CloudBlockBlob sasBlob = new CloudBlockBlob(
new URI(blob.getUri().toString() + "?" + blob.generateSharedAccessSignature(null, "readperm")));
sasBlob.download(new ByteArrayOutputStream());
CloudBlob blobFromUri = new CloudBlockBlob(
PathUtility.addToQuery(blob.getStorageUri(), blob.generateSharedAccessSignature(null, "readperm")));
assertEquals(StorageCredentialsSharedAccessSignature.class.toString(),
blobFromUri.getServiceClient().getCredentials().getClass().toString());
StorageCredentials creds = new StorageCredentialsSharedAccessSignature(
blob.generateSharedAccessSignature(null, "readperm"));
CloudBlobClient bClient = new CloudBlobClient(sasBlob.getServiceClient().getStorageUri(), creds);
CloudBlockBlob blobFromClient = bClient.getContainerReference(blob.getContainer().getName())
.getBlockBlobReference(blob.getName());
assertEquals(StorageCredentialsSharedAccessSignature.class.toString(),
blobFromClient.getServiceClient().getCredentials().getClass().toString());
assertEquals(bClient, blobFromClient.getServiceClient());
return sas;
}
我已根据之前提供的 url 参考将这一行添加到代码中:
perms.setPublicAccess(BlobContainerPublicAccessType.CONTAINER);
我有代码,它为我提供带有令牌的 blob 的 URL,例如:
https://accountName.blob.core.windows.net/directories/blobName?token
仍然使用此 url,它正在下载相应的 blob。 在创建令牌时我应该对代码进行哪些更改,以便我可以在浏览器本身中查看 blob 而无需下载?
【问题讨论】:
-
下载意味着blob实际上保存在磁盘上,而不是显示在浏览器中。对吗?
-
是的,它现在正在下载,但目前我们的要求是在浏览器本身中打开 blob.. 请建议更改代码..
-
您在谈论两件不同的事情。 1 - 公开访问 blob 2 - 显示 blob 内容。通过下载内容并使用适当的应用程序查看或直接在浏览器中查看。