阿里云OSS使用Java上传文件

2023-11-02

一、准备工作

1.1登录阿里云点击对象存储OSS

在这里插入图片描述

1.2 先点击Bucket 列表,在点击创建Bucket 。

在这里插入图片描述

1.3 根据自己需求勾选,然后点击确定。

在这里插入图片描述

1.4 新建好之后,点击bucket名称。

在这里插入图片描述

1.5 点击文件管理

在这里插入图片描述

1.6 在这个页面就可以实现文件的上传和下载。

在这里插入图片描述

二、基于java实现OSS上传

2.1 将鼠标放在头像上,点击AccessKey管理。

在这里插入图片描述

2.2 点击使用子账户

在这里插入图片描述

2.3填写登录名称和显示名称,勾选open api。

在这里插入图片描述

2.4 创建好后将AccessKey IDAccessKey Secret 保存好。

注意: 创建后系统会给你提供如下:记得复制粘贴保存下来,后面会用到;当你你退出这个页面后,系统不会帮你记录下来。要想使用就只能重新创建配置。
在这里插入图片描述

2.5 点击添加权限。进去后选择AliyunOSSFullAccess 点击确定。

在这里插入图片描述
在这里插入图片描述

2.6 在项目pom.xml添加依赖。

<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>3.10.2</version>
</dependency>
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>

2.7 使用test测试类测试

 @Test
    public void testUp() throws FileNotFoundException {
        // Endpoint外网访问域名,以杭州为例。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // accessKeyId 和 accessKeySecret 是先前创建用户生成的
        String accessKeyId = "accessKeyId ";
        String accessKeySecret = "accessKeySecret ";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 上传文件流。
        InputStream inputStream = new FileInputStream("D:\\图片\\img3.jpg");
        ossClient.putObject("tx-ecps", "img3.jpg", inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();
    }

上传成功后,可以在文件管理看见对应的图片。
在这里插入图片描述

三、服务端签名直传

3.1 设置好跨域访问

点击【bucket列表】=>【点击bucket名称】=>【侧边栏选择概览】=>【基础设置下跨域访问点击设置】
在这里插入图片描述
在这里插入图片描述

3.2 创建签名方式

我是采用配置文件读取信息方式,在application.yml添加配置。

spring:
  cloud:
    alicloud:
      access-key: 在创建用户时保存的AccessKey ID
      secret-key: 在创建用户时保存的AccessKey Secret 
      bucket: bucket名称
      oss:
        endpoint: OSS外网访问的地域节点endpoint

创建签名工具类

@RestController
@RequestMapping("third")
public class OssController {

    @Autowired
    OSS ossClient;

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

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


    @RequestMapping("/oss/policy")
    public R policy() {

        String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
        // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
//        String callbackUrl = "http://88.88.88.88:8888";
        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);
            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());
        }

        return R.ok().put("data",respMap);
    }
}

启动访问成果页面,访问接口返回签名信息就表示成功。前端文件上传就直接调用即可。
在这里插入图片描述

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

阿里云OSS使用Java上传文件 的相关文章

随机推荐

  • JAVA语言多线程的执行

    这里写目录标题 1 关于多线程的介绍与执行 1 1什么是线程 什么是进程 2 2进程和线程是什么关系 3 3主栈与其它栈的关系 4 4单核cpu和多核cpu 5 5run 和start 的作用和关系 6 6线程的个数判别 7 7实现线程的两
  • Servlet(Servlet的体系结构, Servlet相关配置)

    Servlet的体系结构 Servlet 接口 GenericServlet 抽象类 HttpServlet 抽象类 GenericServlet 将Servlet接口中其他的方法做了默认空实现 只将service 方法作为抽象 将来定义S
  • AGV小车修改地图匹配得分

    用NoMachine连接小车进入工控机内部 在路径 Home okagv2020 install share cartographer ros configuration files 下找到backpack 2d navigation lu
  • 读的一些书

    读书 乖 摸摸头 阿弥陀佛 么么哒 梦的解析 梦的产生 梦的来源 梦的内容 孩提的梦 梦的表现方法 梦的遗忘 活出生命的意义 找寻生命意义的三个途径 意义 集中营中 囚徒 的心理阶段 自我保全的法则 非暴力沟通 由衷的给予 交流 非暴力沟通
  • QT 信号和信号槽

    信号和信号槽机制 signal slot 是Qt的编程基础 是用来在QObject类或其子类间通讯的方法 作为一种通用的处理机制 信号与信号槽非常灵活 可以携带任意数量的参数 参数的类型也由用户自定 同时其本身也是类型安全的 任何一个从QO
  • 和微软合作的garagegames公司推出基于XNA的游戏引擎TorqueX,支持快速开发(近期引擎免费提供使用)

    我们都知道微软的XNA明年就要推出正式版本 在正式版本里将开始直接支持3D的开发 而XNA的3D低层引擎使用的是garagegames公司开发的游戏引擎 garagegames以开发TORQUE系列游戏引擎出名 TORQUE引擎包括2D的T
  • c语言库函数fgets,C语言 标准I/O库函数 fgets 使用心得

    char fgets char s int n FILE stream 参数说明 s 指定存放所读取的数据的位置 n 指定所读取数据的最大长度 这个最大长度包括了字符串结束符 0 所占据的存储空间 因此 实际最大读取的有效字符数是 n 1
  • Oracle PL/SQL 高级编程

    1 复合数据类型 记录类型 语法格式 type 类型名 is record 字段1 字段1类型 not null 表达式1 字段2 字段2类型 not null 表达式2 说明 记录之间相互赋值要求两个记录类型完全相同 案例 举例1 创建表
  • 三维重建(三)相机参数标定与光束平差法(Bundle Adjustment)

    一 针孔成像模型涉及到的坐标系 由于相机的参数总数相对于某种光学模型而言的 这里用到的比较广泛的光学模型就是小孔成像的模型 下面针对小孔成像的光学模型涉及到的坐标系一一介绍 1 世界坐标系 世界坐标系即为三维空间中物体的坐标 用 Xw Yw
  • MES系统是什么

    前言 通俗的来讲 MES系统是一个辅助规范管理的系统 但是我总觉得这样很抽象 达不到一个很好的效果 所以 我打算从业务开始完整的介绍一下MES系统到底是什么 从业务开始 MES系统是什么 在电路板的生产过程中 有很多地方需要进行管理 从开始
  • @程序员,你在颓丧的时候怎么办?

    01 颓丧的感觉 颓丧 一般指精神萎靡不振 情绪消沉 多用于消极的人身上 有时候也用于别处 比如说 红楼梦 第七六回中就有一句 因又叹道 诗固新奇 只是太颓丧了些 不管怎么说 这个词相关的主题很少会在朋友圈看到 因为人们需要树立积极向上的正
  • JAVA操作Elasticsearch指定主键_id生成策略

    目录 前言 1 JAVA操作Elasticsearch手动指定ID 2 JAVA操作Elasticsearch自动生成ID 3 DSL方式手动指定ID 4 DSL方式自动生成ID 前言 Elasticsearch一共有两种主键生成策略 一个
  • Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on

    报错信息 Failed to execute goal org apache maven plugins maven surefire plugin 2 22 1 test default test on project qc offlin
  • 神经元是多输入单输出吗,单输入单输出神经网络

    1 人工神经网络的知识表示形式 人工神经网络的知识表示形式 1 每个神经元都是一个多输入单输出的信息处理单元 2 神经元输入分兴奋性输入和抑制性输入两种类型 3 神经元具有空间整合特性和阈值特性 4 神经元输入与输出间有固定的时滞 主要取决
  • 关于博客积分规则,总是找不着入口

    博客积分规则 博客积分是CSDN对用户努力的认可和奖励 也是衡量博客水平的重要标准 博客等级也将由博客积分唯一决定 积分规则具体如下 1 每发布一篇原创或者翻译文章 可获得10分 2 每发布一篇转载文章 可获得2分 3 博主的文章每被评论一
  • 微信小程序从入坑到放弃二十五:记一次在WXS中使用正则表达式的坑

    摘要 WXS WeiXin Script 是小程序的一套脚本语言 结合 WXML 可以构建出页面的结构 在此次开发中 由于接口返回数据不统一 所以要对某些字段进行过滤 但直接使用replace时竟然报错了 原来在WXS中要生成regexp对
  • 网络编程day3作业

    tftp下载 include
  • 【NLP】第 3 章 :BERT

    在本章中 您将学习由 Google 开发的 Transformer 架构的实现之一 称为 BERT Google AI Language 的研究人员最近所做的工作导致发表了一篇名为 BERT 来自变形金刚的双向编码器表示 的论文 BERT取
  • 模拟get和post请求

    一 模拟请求 浏览器及工具模拟 http请求有很多种 常用的请求方式有两种 get请求和post请求 今天先介绍浏览器以及工具模拟请求 下次会介绍代码模拟 1 get请求格式 url param1 value1 param2 value2
  • 阿里云OSS使用Java上传文件

    一 准备工作 1 1登录阿里云点击对象存储OSS 1 2 先点击Bucket 列表 在点击创建Bucket 1 3 根据自己需求勾选 然后点击确定 1 4 新建好之后 点击bucket名称 1 5 点击文件管理 1 6 在这个页面就可以实现