快速入门:使用 Java 存储 SDK V10 上传、下载和列出 Blob
本快速入门介绍如何使用新的 Java 存储 SDK 上传、下载和列出 Azure Blob 存储的容器中的块 Blob。 新的 Java SDK 将响应式编程模型与 RxJava 配合使用,提供异步操作。 详细了解 RxJava 的 Java VM 响应式扩展。
先决条件
若要访问 Azure 存储,需要一个 Azure 订阅。 如果还没有订阅,则请在开始前创建一个免费帐户。
对 Azure 存储进行的所有访问都要通过存储帐户完成。 如果还没有存储帐户,可使用 Azure 门户轻松创建一个。 也可以使用 Azure PowerShell 或 Azure CLI 创建存储帐户。 有关如何创建帐户的帮助,请参阅创建存储帐户。
请确保已安装下述额外的必备组件:
下载示例应用程序
本快速入门中使用的示例应用程序是基本的控制台应用程序。
使用 git 可将应用程序的副本下载到开发环境。
git clone https://github.com/Azure-Samples/storage-blobs-java-v10-quickstart.git
此命令会将存储库克隆到本地 git 文件夹。
项目导入完以后,请打开位于 src/main/java/quickstart 中的 Quickstart.java。
该demo里面包含了增删改查的所有方法,也是比较全面的,看官方文档就可以实现,接下来就SAS令牌的获取讲几句我遇到的坑;
由于我没有门户的账号和密码,所有有诸多不便,如果有门户账号的勿鄙视,下面介绍一下获取account SAS我的实现;
1、字符串拼接
String stringToSign = accountName +"\n" + sp + "\n" + ss + "\n" + srt+ "\n" + st + "\n" + se + "\n" + si + "\n" + spr +"\n" + sv + "\n"
注意点,固定格式,一个都不能少,就算传入参数为空,也要按这个格式拼接;
2、签名加密,组成sasToken
String signature = getHMAC256(accountKey, stringToSign); sasToken = "sp="+sp+"&ss="+ss+"&srt="+srt+"&st="+st+"&se="+ se+"&spr="+spr+"&sv="+sv +"&sig=" + URLEncoder.encode(signature, "UTF-8");
3、拼接成请求字符串
resultToken = "BlobEndpoint="+containerUrl+"/;"+"SharedAccessSignature="+sasToken+";";
public String getHMAC256(String key, String input) { Mac sha256_HMAC = null; String hash = null; try { sha256_HMAC = Mac.getInstance("HmacSHA256"); sha256_HMAC.init(new SecretKeySpec(Base64.getDecoder().decode(key), "HmacSHA256")); byte[] utf8Bytes = input.getBytes("UTF-8"); hash = Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(utf8Bytes)); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return hash; }
如果出现SAS不可用的现象,基本就是签名连接字符串和签名算法这两点问题的原因;
参考文件:
https://docs.microsoft.com/zh-cn/azure/storage/blobs/storage-quickstart-blobs-java-v10
参考文章:
- https://docs.microsoft.com/en-us/rest/api/storageservices/Authentication-for-the-Azure-Storage-Services
- https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1
- https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-sas
- https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-security