Azure Blob Storage 基本用法上传/下载(Java)

2023-11-07

简单概念

Blob Storage

Azure Blob Storage是用来存放文本,图片,视频等非架构华数据从存储服务, 我们可以在任何地方通过http/https协议访问Blob Storage

Azure Blob Storage的存储结构

在这里插入图片描述

Azure Storage Account

Account是用来管理Azure Storage的一个命名空间,主要用来控制存储数据的访问权限和计费. Account控制Blob, Queue, File和Table的访问权限.

要想使用Blob Storage, 必须要有一个Storage Account账户

Container

Container中包含一组资源(Blob), 所有的Blob都必须存在于Container中, 概念可以类比window系统的C/D/E/F盘(我是这么理解的, 如有错,轻喷)

一个Storage Account可以控制不同Container的访问权限. 可以包含无数个Container, 每个Container中也可以包含无数个Blob

注意: Container的名字是小写

Blob

一个Blob代表一个文件, Blob划分为三种类型

  1. Block Blob: 主要存储静态文件, 如图片, 视频, 文档.
  2. Append Blob: 与Block Blob类似, 优化了append操作, 主要应用场景就是日志存储.
  3. Page Blob: 针对频繁的读写操作做了优化, 如Azure上虚拟机的磁盘使用的就是Page Blob.

操作

Maven依赖

<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>

创建Container对象

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();
    }
}

获取Blob列表

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);
    }
}

下载Blob

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();
        }
    }
}

结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure Blob Storage 基本用法上传/下载(Java) 的相关文章

随机推荐

  • JAVA排查bug的相关命令

    jamp 主要用于打印指定Java进程 或核心文件 远程调试服务器 的共享对象内存映射或堆内存细节 举例 root iZwz9hv1phm24s3jicy8x1Z crm ps ef grep java root 2529802 1 0 J
  • 安卓 webview作为recycleview item显示不全解决办法

    import android annotation SuppressLint import android content Context import android os Build import android support ann
  • 视频无损放大软件:Topaz Video Enhance Al (Win&Mac) 激活版

    Topaz Video Enhance AI是一款由Topaz Labs开发的强大视频增强软件 它利用人工智能和机器学习技术 可以将低分辨率 模糊或噪声严重的视频转换为更清晰 更详细的高分辨率视频 Topaz Video Enhance A
  • 少儿学人工智能编程好还是机器人编程好

    少儿学人工智能编程好还是机器人编程好 小孩的学习一直以来都是家长们非常关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说相当的耐心的 会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说
  • vs+vm双机调试

    基础 VS2017安装成功 wdk10 注意事项 关闭 主机 客户机 防火墙 互相ping都能ping通 一 具体操作步骤 工具安装就不说了 不会的百度一下 只说一下一些关键的地方 1 安装好虚拟机后 给虚拟机增加一个串口设备 具体操作见图
  • 汇编基础(2) -- ARM64

    简介 ARM架构中 ARM64 也称为AArch64 是一种64位处理器架构 它是ARMv8指令集的一部分 与之前的32位ARM架构相比 ARM64提供了更大的寄存器容量 更广阔的地址空间和更高的计算能力 64位版本的指令集和32位版本的指
  • Linux上查找最大文件的3种方法

    Linux上查找最大文件的3种方法 第一种 ls 最简单的方法就是借助 ls 命令 因为 ls 命令本身输出是带文件大小信息的 比如 我要列出 data log 目录中的20个最大文件 可以 ls lSh data log head 20
  • mongouve的使用

    http my oschina net u 1026531 blog 188336
  • HTML的基础知识及(页面、多媒体、表格)标签

    1 HTML 什么是HTML 网络协议 hypertext markup language 超文本标记语言 2 环境准备 开发环境 sublime VScode editplus IDE hbuilder webstorm 运行环境 浏览器
  • 1-9九个数字不重复组成一个三位数加法算式,求出所有组合

    import java util ArrayList import java util List public class TestNumber public static void main String args int count 0
  • Java开发中的常见问题和解决方法:如何解决常见的性能和bug问题

    章节一 引言 在Java开发中 我们经常会面临各种各样的问题 包括性能问题和Bug 这些问题可能会导致应用程序的运行变慢 不稳定甚至崩溃 本文将介绍一些常见的Java开发问题 并提供解决这些问题的方法和技巧 帮助开发人员更好地处理性能和Bu
  • html 发件人怎么设置,a标签创建mailto链接发送电子邮箱用法详解

    在html5中 利用标签的mailto可以创建发送邮件到一个或多个电子邮箱的超链接功能 其用法详解如下 标签mailto最常见用法 这个用法是最常见的用法 在大多数情况下 我们都会使用这个方式发送电子邮件 1 发送一个邮箱 书写格式 联系博
  • STM32 开机一直进IDLE空闲中断的解决思路

    串口IDLE空闲中断 常用于串口DMA IDLE中断接收不定长数据 一开始玩DMA 调试程序在一直进入IDLE中断时候 可能是没有软件清零 STM32中文参考手册这么描述的 IDLE 检测到空闲线路 IDLE line detected 检
  • 热更新_ToLua学习示例 06_LuaCoroutine2

    function CoExample WaitForSeconds 1 作者封装的协程等待一秒 print WaitForSeconds end time UnityEngine Time time WaitForFixedUpdate 等
  • cas单点登录系列1.3:自定义登录页

    cas单点登录系列1 3 自定义登录页 cas提供登录页比较大众 我们根据需求进行自定义 所以本节会介绍登录页的一些内容 比较简单 大家可根据情况进行学习 文章目录 cas单点登录系列1 3 自定义登录页 前言 一 登录页组成 二 登录接口
  • java中使用jxls导出excel,excel单元格换行,多sheet页导出

    一 模板 jxls通过模板中的批注语法来渲染数据 所以写好模板已经成功了一大半 我的模板如下 这里我定义了两个sheet页 第一个sheet页就是汇总的 直接取数据遍历 第二个sheet页就是动态sheet页的模板 注意模板作用域的定义一定
  • Python总复习——简答题篇

    简答题篇 1 简述元祖 列表和字典的区别 2 简述局部变量和全部局变量的区别 3 简述闭包满足的三个条件 4 简述导入模块的方法 1 简述元祖 列表和字典的区别 名称 外形 存储结构 访问方式 是否可变类型 列表 中括号括起来的数据 可以存
  • 软件测试工程师技术发展规划 (2022初稿)

    软件测试工程师技术发展规划 2022 2022年3月18日22 19 04 1 不同Level的技术标准 1 1 级别一 测试工程师TE 1 1 1 主要工作内容 1 2 级别二 测试开发工程师 1 2 1 主要工作内容 1 2 2 工作组
  • Java中static关键字详解

    1 1概述 static是静态修饰符 什么叫静态修饰符呢 大家都知道 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的 而所谓静态就是指在编译后所分配的内存会一直存在 直到程序退出内存才会释放这个空间 也就是只要程序在运行 那
  • Azure Blob Storage 基本用法上传/下载(Java)

    文章目录 简单概念 Blob Storage Azure Blob Storage的存储结构 Azure Storage Account Container Blob 操作 Maven依赖 创建Container对象 获取Blob列表 下载