使用Java的Azure文件映像路径

时间:2019-01-27 09:44:57

标签: java spring azure azure-web-sites azure-storage

嗨,我正在尝试将图像保存在Azure存储上,我已经具有配置步骤,并且已经有了上载方法

AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(sourceFile.toPath());
    TransferManager.uploadFileToBlockBlob(fileChannel, blob, 8 * 1024 * 1024, null).subscribe(response -> {
        System.out.println("Completed upload request.");
        System.out.println(response.response().statusCode());

    });

我如何在azure上获取url图像路径以将其保存在数据库中并显示在我的网站上?

1 个答案:

答案 0 :(得分:1)

正如@GauravMantri所说,您可以通过blob.toURL()获取Blob的URL。然后,如果Blob的容器是公共的(设置为公共访问级别),并且Blob的ContentType属性设置正确,如image/png,则可以通过url直接访问图像,例如在img标签中使用以显示在下面的网页中。

<img src="myaccountname.blob.core.windows.net/test/testURL">

但是,考虑到安全访问,已将容器设置为私有访问级别,请参阅官方文档Secure access to an application's data in the cloudUsing shared access signatures (SAS)。然后,我们需要生成带有SAS签名的Blob网址以进行访问。

这是生成带有SAS签名的blob网址的示例代码。

SharedKeyCredentials credentials = new SharedKeyCredentials(accountName, accountKey);
ServiceSASSignatureValues values = new ServiceSASSignatureValues()
                .withProtocol(SASProtocol.HTTPS_ONLY) // Users MUST use HTTPS (not HTTP).
                .withExpiryTime(OffsetDateTime.now().plusDays(2)) // 2 days before expiration.
                .withContainerName(containerName)
                .withBlobName(blobName);
BlobSASPermission permission = new BlobSASPermission()
                .withRead(true)
                .withAdd(true)
                .withWrite(true);
values.withPermissions(permission.toString());
SASQueryParameters serviceParams = values.generateSASQueryParameters(credentials);
String sasSign = serviceParams.encode();
String blobUrlWithSAS = String.format(Locale.ROOT, "https://%s.blob.core.windows.net/%s/%s%s",
                accountName, containerName, blobName, sasSign);

您也可以在blob.toURL()字符串的末尾添加SAS签名。

String blobUrlWithSAS = blob.toString()+sasSign;

关于SAS签名,您可以在ServiceSASSignatureValues ClassAccountSASSignatureValues Class中引用这些示例代码。