IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 阿里云对象存储服务(oss)的开通与服务端完成签名的代码 -> 正文阅读

[Java知识库]阿里云对象存储服务(oss)的开通与服务端完成签名的代码

一、云存储技术出现的原因?

一个简单的系统中,由浏览器来上传文件到服务器,服务器接收文件后,存储到服务器本地。
在这里插入图片描述
如果是一个分布式系统,浏览器根据负载均衡策略可能随机到任一服务器。如果文件只保存到其中一个服务器上,其他服务器只能将文件拷贝到自己服务器上,浪费了很多资源和时间。
在这里插入图片描述
因此,云存储技术出现很有必要。
统一将文件存储到云端,读取文件时只需同意从云端读取即可。
在这里插入图片描述

二、阿里云对象存储

1、普通上传方式

普通上传方式为:用户将文件上传到服务器,服务器再将文件上传到云端。

优点是比较安全,不会泄露账号和密码。但缺点也很明显,效率低,传输所需的时间长。
在这里插入图片描述

2、服务端签名后直传

基于Post Policy的使用规则在服务端完成签名,然后通过表单直传数据到OSS。由于服务端签名直传无需将AccessKey暴露在前端页面,具有比较高的安全性。

在这里插入图片描述

三、开通阿里云对象存储服务

(1)首先得开通阿里云oss对象存储功能,并创建好一个bucket。
可参考如下链接进行开通
阿里云对象存储oss开通流程

(2)创建好bucket之后,点击右上角头像,点击AccessKey管理
在这里插入图片描述
(3)点击开始使用子用户AccessKey
在这里插入图片描述
(4)点击创建用户
在这里插入图片描述
(5) 创建好后,添加管理对象存储服务权限
在这里插入图片描述

四、通过java代码在服务端完成签名

步骤1: 引入alibaba-oss依赖
 <!--阿里云oss-starter-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
步骤2: 在yml文件中添加配置
spring:
	cloud:
 		alicloud:
 			#secret-key和access-key复制自己的
      		secret-key: Vn2Cr6fxxxxxnzc6scOXtM23vzqzBY
      		access-key: LTAI5tEMxxxxCo8q9Pv3eb
      		#endpoint自己创建时选的哪个就填哪个
      		oss:
        		endpoint: oss-cn-shanghai.aliyuncs.com

步骤3:编写配置类

@RestController
public class OssConfigController {

    @Resource
    private OSS ossClient;

    @Value("${spring.cloud.alicloud.access-key}")
    private String accessId;

    @Value("${spring.cloud.alicloud.oss.endpoint}")
    private String endpoint;

    @RequestMapping("/oss/policy")
    public Map<String, String> doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 填写Bucket名称,例如examplebucket。
        String bucket = "gulimall-beiyue";
        // 填写Host名称,格式为https://bucketname.endpoint。
        String host = "https://"+ bucket+ "." + endpoint;
        // 设置上传到OSS文件的前缀,可置空此项。置空后,文件将上传至Bucket的根目录下。
        String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String dir = format+ "/";
        Map<String, String> respMap = null;
        try {
            long expireTime = 30;
            long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
            Date expiration = new Date(expireEndTime);
            // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

            String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes("utf-8");
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            String postSignature = ossClient.calculatePostSignature(postPolicy);

            respMap = new LinkedHashMap<String, String>();
            respMap.put("accessid", accessId);
            respMap.put("policy", encodedPolicy);
            respMap.put("signature", postSignature);
            respMap.put("dir", dir);
            respMap.put("host", host);
            respMap.put("expire", String.valueOf(expireEndTime / 1000));
            // respMap.put("expire", formatISO8601Date(expiration));

        } catch (Exception e) {
            // Assert.fail(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            ossClient.shutdown();
        }
        return resMap;
    }
}

浏览器请求“http://localhost:端口号/oss/policy”,可看到签名。

{"accessid":"LTAI5tEMdcBXXACo8q9Pv3eb",
"policy":"eyJleHBpcmF0aW9uIjoiMjAyMi0wMy0zMFQZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjAwMF0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCIyMDIyLTAzLTMwLyJdXX0=",
"signature":"7S0MZ8ZBDkK+q5ZVrWLVQq2ycRs=",
"dir":"2022-03-30/",
"host":"https://gulimall-beiyue.oss-cn-shanghai.aliyuncs.com",
"expire":"1648624790"}

将签名数据返回前端后,前端带着签名数据,直接访问host地址,就可传送图片到云端。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:49:43  更:2022-03-31 23:52:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:08:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码