赞
踩
Azure Blob Storage是用来存放文本,图片,视频等非架构华数据从存储服务, 我们可以在任何地方通过http/https协议访问Blob Storage
Account是用来管理Azure Storage的一个命名空间,主要用来控制存储数据的访问权限和计费. Account控制Blob, Queue, File和Table的访问权限.
要想使用Blob Storage, 必须要有一个Storage Account账户
Container中包含一组资源(Blob), 所有的Blob都必须存在于Container中, 概念可以类比window系统的C/D/E/F盘(我是这么理解的, 如有错,轻喷)
一个Storage Account可以控制不同Container的访问权限. 可以包含无数个Container, 每个Container中也可以包含无数个Blob
注意: Container的名字是小写
一个Blob代表一个文件, Blob划分为三种类型
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-data-lake-store-sdk</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>11.0.0</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-storage</artifactId> <version>8.3.0</version> </dependency>
public static void initAzure(String containerName) { String ACCOUNT_NAME = <ACCOUNT NAME>; String ACCOUNT_KEY = <ACCOUNT KEY>; String END_POINT = <END POINT>; String PROTOCOL = "https"; String format = "DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2};EndpointSuffix={3}"; CloudStorageAccount storageAccount = null; CloudBlobClient blobClient = null; CloudBlobContainer container = null; try { // 获得StorageAccount对象 storageAccount = CloudStorageAccount.parse( MessageFormat.format(format, PROTOCOL, ACCOUNT_NAME, ACCOUNT_KEY, END_POINT)); // 由StorageAccount对象创建BlobClient blobClient = storageAccount.createCloudBlobClient(); // 根据传入的containerName, 获得container实例 container = blobClient.getContainerReference(containerName); } catch (URISyntaxException | InvalidKeyException | StorageException e) { e.printStackTrace(); } }
public static void listBlobs() {
/**
* 第一个参数, container中blob的前缀, 可以是文件夹的前缀, 也可以是blob的前缀
* 第二个参数, 是否展开文件夹中的文件
* false: 如Container中只有blob就全部列出; 如有文件夹,则只列出文件夹名
* true: 列出所有blob
*/
Iterable<ListBlobItem> blobItems = container.listBlobs(null,false);
for (ListBlobItem blobItem : blobItems) {
String uri = blobItem.getUri().toString();
System.out.println(uri);
}
}
public static void downloadFile(String blobPath, String targetPath) {
String finalPath = targetPath.concat(blobPath);
try {
// 传入要blob的path
CloudBlockBlob blob = container.getBlockBlobReference(blobPath);
// 传入目标path
blob.downloadToFile(finalPath);
} catch (URISyntaxException | StorageException | IOException e) {
e.printStackTrace();
}
}
上传文件注意做校验, 这里只是校验本地文件和云端文件的大小
public static void uploadFile(File file) { try { // 构建目标BlockBlob对象 CloudBlockBlob blob = container.getBlockBlobReference("20191012/a"); // 将本地文件上传到Azure Container blob.uploadFromFile(file.getPath()); // 获得获得属性 blob.downloadAttributes(); // 获得上传后的文件大小 long blobSize = blob.getProperties().getLength(); // 获得本地文件大小 long localSize = file.length(); // 校验 if (blobSize != localSize) { System.out.println("校验失败...上传失败"); // 删除blob blob.deleteIfExists(); } else { System.out.println("上传成功"); } } catch (URISyntaxException | StorageException | IOException e) { e.printStackTrace(); } }
import com.microsoft.azure.storage.CloudStorageAccount; import com.microsoft.azure.storage.StorageException; import com.microsoft.azure.storage.blob.CloudBlobClient; import com.microsoft.azure.storage.blob.CloudBlobContainer; import com.microsoft.azure.storage.blob.CloudBlockBlob; import com.microsoft.azure.storage.blob.ListBlobItem; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.security.InvalidKeyException; import java.text.MessageFormat; /** * @author jiale.he * @date 2019/10/12 */ public class AzureDemo { private static String ACCOUNT_NAME = "***"; private static String ACCOUNT_KEY = "***"; private static String END_POINT = "***"; private static String PROTOCOL = "***"; private static String format = "DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2};EndpointSuffix={3}"; private static CloudStorageAccount storageAccount = null; private static CloudBlobClient blobClient = null; private static CloudBlobContainer container = null; public static void main(String[] args) { initAzure("***"); listBlobs(null); } public static void listBlobs(String perfix) { /** * 第一个参数, container中blob的前缀, 可以是文件夹的前缀, 也可以是blob的前缀 * 第二个参数, 是否展开文件夹中的文件, 如container中无文件夹, 则会列出所有blob */ Iterable<ListBlobItem> blobItems = container.listBlobs(null, true); for (ListBlobItem blobItem : blobItems) { String uri = blobItem.getUri().toString(); System.out.println(uri); } } public static void uploadFile(File file) { try { // 构建目标BlockBlob对象 CloudBlockBlob blob = container.getBlockBlobReference("20191012/aaa.txt"); // 将本地文件上传到Azure Container blob.uploadFromFile(file.getPath()); // 获得获得属性 blob.downloadAttributes(); // 获得上传后的文件大小 long blobSize = blob.getProperties().getLength(); // 获得本地文件大小 long localSize = file.length(); // 校验 if (blobSize != localSize) { System.out.println("校验失败...上传失败"); // 删除blob blob.deleteIfExists(); } else { System.out.println("上传成功"); } } catch (URISyntaxException | StorageException | IOException e) { e.printStackTrace(); } } public static void downloadFile(String blobPath, String targetPath) { String finalPath = targetPath.concat(blobPath); try { // 传入要blob的path CloudBlockBlob blob = container.getBlockBlobReference(blobPath); // 传入目标path blob.downloadToFile(finalPath); } catch (URISyntaxException | StorageException | IOException e) { e.printStackTrace(); } } public static void initAzure(String containerName) { try { // 获得StorageAccount对象 storageAccount = CloudStorageAccount.parse(MessageFormat.format(format, PROTOCOL, ACCOUNT_NAME, ACCOUNT_KEY, END_POINT)); // 由StorageAccount对象创建BlobClient blobClient = storageAccount.createCloudBlobClient(); // 根据传入的containerName, 获得container实例 container = blobClient.getContainerReference(containerName); } catch (URISyntaxException | InvalidKeyException | StorageException e) { e.printStackTrace(); } } }
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。