Azure Blob 存储是 Microsoft 提供的适用于云的对象存储解决方案。 Blob 存储最适合存储巨量的非结构化数据
准备
Azure 订阅
点击创建免费帐户,选择免费开始,使用微软账户注册订阅后即可试用12个月
Azure 存储帐户
点击创建存储帐户,根据教程即可创建一个存储账户,若没有安装azure cli,推荐直接参考【门户网站】一栏
Azure门户凭据
- 登录到 Azure 门户。
- 找到自己的存储帐户。
- 在存储帐户概述的“设置”部分,选择“访问密钥”。 在这里,可以查看你的帐户访问密钥以及每个密钥的完整连接字符串。
- 找到“密钥 1”下面的“连接字符串”值,选择“复制”按钮复制该连接字符串。 下一步需将此连接字符串值添加到某个环境变量。
开发步骤
配置
- 引入依赖
<!--lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--azure storage -->
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
- 属性配置
spring:
servlet:
multipart: # spring mvc文件上传
max-request-size: 10MB
max-file-size: 1MB
azure:
storage: # azure储存配置
default-endpoints-protocol: https
account-name: [account-name]
account-key: [account-key]
endpoint-suffix: [endpoint-suffix]
container-reference: [container-reference] # 容器名称
generate-thumbnail: false # 生成缩略图
代码编写
- 根据属性编写对应参数类
@Data
@Component
public class AzureStorageParam {
@Value("${azure.storage.default-endpoints-protocol}")
private String defaultEndpointsProtocol;
@Value("${azure.storage.account-name}")
private String accountName;
@Value("${azure.storage.account-key}")
private String accountKey;
@Value("${azure.storage.endpoint-suffix}")
private String endpointSuffix;
@Value("${azure.storage.container-reference}")
private String containerReference;
/**
* 拼接连接字符串
*/
public String getStorageConnectionString() {
String storageConnectionString =
String.format("DefaultEndpointsProtocol=%s;AccountName=%s;AccountKey=%s;EndpointSuffix=%s",
defaultEndpointsProtocol, accountName, accountKey, endpointSuffix);
return storageConnectionString;
}
}
- 编写文件上传的返回模型
@Data
@Accessors(chain = true)
public class BlobUpload {
// 文件名
private String fileName;
// 原文件
private String fileUrl;
// 缩略图
private String thumbnailUrl;
}
- 工具类
/**
* 获取blob container
*
* @param storageConnectionString
* @param containerReference
* @return
*/
public static CloudBlobContainer getAzureContainer(String storageConnectionString, String containerReference) {
CloudStorageAccount storageAccount;
CloudBlobClient blobClient = null;
CloudBlobContainer container = null;
try {
storageAccount = CloudStorageAccount.