阿里云oss存储

文章目录

  • 准备阿里云的OSS
    • 控制台
    • 创建bucket
    • 获取AccessKey
  • java使用oss
    • 导入依赖
    • 官网demo
    • 修改参数
    • 运行demo代码
  • 封装工具类
  • Oss下载
    • 如何保证指定时间段内可以访问私有权限的图片文件?

准备阿里云的OSS

控制台

访问阿里云官网,登录以后,右上角有个控制台
在这里插入图片描述
点击左上角,然后搜索oss
在这里插入图片描述
因为我没有开通过,所以提示开通
在这里插入图片描述
点击开通
在这里插入图片描述

创建bucket

在这里插入图片描述
填写bucket名称和选择读写权限为公共读,然后完成创建
在这里插入图片描述
然后bucket列表中,就有刚才创建的bucket了
在这里插入图片描述
点击列表中的bucket名称,然后点击概览,看到一些基础信息,其中有个Endpoint,上传文件会用到
在这里插入图片描述

获取AccessKey

鼠标移到右上角头像处,有个AccessKey管理,点击来获取AccessKey,

在这里插入图片描述
选择继续使用
在这里插入图片描述
然后点击创建AccessKey,再验证手机验证码,就成功创建,需要注意的是,获取到AccessKey以后,要保存好,关闭这个窗口就看不到了
在这里插入图片描述

java使用oss

左边最下面有个sdk下载
在这里插入图片描述
java后面有个小图标,点一下
在这里插入图片描述
文档中心打开
在这里插入图片描述

导入依赖

左边找到java-安装,我是maven项目,选择导入pom依赖,,它有说明,java9以上要引入下面那部分,具体看你版本,我是9以上,两部分依赖都要
在这里插入图片描述

        <!--oss依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.17.4</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- no more than 2.3.3-->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>

官网demo

依赖有了,现在要做的就是上传文件的测试demo了,找到测试demo,粘到项目代码中
在这里插入图片描述

修改参数

粘贴过来以后,把一些关键参数换成我们实际的数值
demo需要修改的参数说明
在这里插入图片描述

运行demo代码

package com.wzw.alioss;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;

public class DemoTest {
    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        //EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        String ACCESS_KEY_ID = "LTAI5tRHMRGaK14mSm1LNRkB";
        String ACCESS_KEY_SECRET = "mrniIO007QfxpdsMzW0CDROcPjoTfg";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "ali-bucket-space";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "dog.jpg";

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

        try {

            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new FileInputStream("C:\\Users\\w4523\\Desktop\\dogjpg.jpg"));

            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 上传字符串。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

}

运行,上传成功
在这里插入图片描述

封装工具类

上面参数说明已经看到了,其实很多东西都是固定的,只有一些值需要传入就可以了,现在封装成一个工具类,只传入我们要上传的文件对象就可以了

package com.wzw.alioss.com.wzw.alioss.util;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.InputStream;

public class AliOssUtil {

    //地域节点
    private static final String endpoint="https://oss-cn-beijing.aliyuncs.com";
    //ACCESS_KEY_ID
    private static final String ACCESS_KEY_ID="LTAI5tRHMRGaK14mSm1LNRkB";
    //ACCESS_KEY_SECRET
    private static final String ACCESS_KEY_SECRET="mrniIO007QfxpdsMzW0CDROcPjoTfg";
    //bucket名称
    private static final String bucketName="ali-bucket-space";


    /**
     * 上传文件到OSS
     * @param objectName
     * @param inputStream
     * @return
     * @throws Exception
     */
    public static String uploadFile(String objectName, InputStream inputStream) throws Exception {

        //文件存储的地址
        String url="";

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

        try {

            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);

            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 上传字符串。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            /**
             * 示例中上传的文件地址:https://ali-bucket-space.oss-cn-beijing.aliyuncs.com/dog.jpg
             * 根据这个地址url可以观察到,它是https://+bucketName+区域节点+objectName
             */
            url="https://"+bucketName+"."+endpoint.substring(endpoint.lastIndexOf("/")+1)+"/"+objectName;
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }
}

controller调用

package com.wzw.alioss.com.wzw.alioss.controller;

import com.wzw.alioss.com.wzw.alioss.util.AliOssUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@RestController
public class AliOssController {

    /**
     * 上传文件到OSS
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    public String uploadFile(MultipartFile file) throws Exception {
        String fileName=file.getOriginalFilename();
        String url = AliOssUtil.uploadFile(UUID.randomUUID()+fileName.substring(fileName.lastIndexOf(".")), file.getInputStream());
        return url;
    }
}

发送postman请求,看到结果也返回了url
在这里插入图片描述
查看bucket,上传成功
在这里插入图片描述

整个示例代码:https://gitee.com/w452339689/alioss_test

Oss下载

如果是公开的,直接访问固定的url就行,如果是私有的,需要授权

如何保证指定时间段内可以访问私有权限的图片文件?

访问私有云文件url提示如下
在这里插入图片描述
私有云访问也是需要认证的,可以通过文件名授权一个临时的url,在指定的时间内可以访问。

官方文档:https://help.aliyun.com/zh/oss/user-guide/how-to-access-a-private-image-object-within-a-specific-period-of-time?spm=a2c4g.11186623.0.i20
在这里插入图片描述

成功获取,查看能不能访问到,完成
在这里插入图片描述
封装工具类

    /**
     * 阿里云oss生成临时访问路径
     * @param objectName 文件名631ffc15-83d8-478f-95e5-5a8a96afa7d4.png
     */
    public static String getOssUrl(String objectName) {

        String fileUrl="";

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

        try {
            // 设置签名URL过期时间为1天,单位为秒,
            Date expiration = new Date(new Date().getTime() + 3600 * 1000);
            // 生成以GET方法访问的签名URL,在签名URL有效期内访客可以直接通过浏览器访问相关内容。
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            System.out.println(url.toString());
            if(Optional.ofNullable(url).isPresent()) {
                return fileUrl=url.toString();
            }
        } catch (OSSException oe) {
            log.error("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            log.error("Error Message:" + oe.getErrorMessage());
            log.error("Error Code:" + oe.getErrorCode());
            log.error("Request ID:" + oe.getRequestId());
            log.error("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            log.error("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            log.error("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return fileUrl;
    }

可能遇到一个问题,访问临时url,提示如下,看信息应该是时间不对,我之前设置的是30天,调整成1天就好了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/749598.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大众点评根据关键词搜索采集店铺信息

大众点评根据关键词搜索采集店铺信息&#xff0c;包括店铺名称、大中小分类、省市区划分、人均价格、评价数量、团购数量、全部团购名称、全部团购链接&#xff08;团购信息还可解析出每个团购的价格&#xff09; ​​​

【代码安全】如何通过实现代码加密与魔改Python,防止代码泄露、恶意窃取

如何通过实现代码加密与魔改Python&#xff0c;防止代码泄露、恶意窃取 文章目录 如何通过实现代码加密与魔改Python&#xff0c;防止代码泄露、恶意窃取前言概述代码运行演示Step 0: 正常代码运行Step 1: 代码加密Step 2: 加密代码在魔改环境运行Step 3: 加密代码在正常环境运…

matlab编辑稀疏单位方阵

创建 10001000 稀疏单位方阵&#xff0c;并查看稀疏模式。 &#xff08;1&#xff09; I speye(1000); spy(I)&#xff08;2&#xff09; S speye(400,800); spy(S)此命令等同于 speye([400 800])。

【Python】易错题 [1]

目录 一、选择&#xff1a; 1.列表的复制​编辑 2.函数 二、填空 一、选择&#xff1a; 1.列表的复制 在Python中&#xff0c;列表是可变的数据类型。当将一个列表赋值给另一个变量时&#xff0c;实际上是将这个变量的引用指向原始列表。&#xff08;指针&#xff09;因此&…

直播怎么录制视频?直播视频,3种录制方法

“今晚我最喜欢的游戏博主要进行直播&#xff0c;但我可能还要加班。怎么办&#xff0c;不想错过直播的内容&#xff01;电脑怎么才能进行直播录制视频啊&#xff1f;谁能教教我&#xff1f;” 在数字化的今天&#xff0c;直播已经成为人们获取信息和娱乐的重要途径。有时&…

Adobe Acrobat编辑器最新版下载安装 Adobe Acrobat版本齐全!

功能强大&#xff0c;Adobe Acrobat无疑是PDF文档处理领域的翘楚。这款软件集多种PDF文档处理功能于一身&#xff0c;不仅使得用户可以轻松地编辑PDF文档&#xff0c;更能轻松应对转换和合并等多种需求。 在编辑功能上&#xff0c;Adobe Acrobat的表现尤为出色。无论是添加文字…

IDEA 插件推荐【一】

好使的插件可以让工作事倍功半。下面就推荐一些常用的IDEA插件&#xff0c;如果你有其他好使的插件&#xff0c;欢迎评论区留言分享出来~ 1.Key Promoter X Key Promoter X 插件&#xff0c;IDEA 快捷键提示工具。 在每次我们使用鼠标进行 IDEA 的某个操作&#xff0c;Key Pr…

​​植物大战僵尸杂交版直装版v2.1 安卓版:全新策略塔防体验

《植物大战僵尸杂交版直装版》v2.1是由B站UP主“潜艇伟伟迷”精心制作的同人游戏&#xff0c;为策略塔防手游带来了全新的活力。游戏中引入了众多创新的杂交植物&#xff0c;例如结合了向日葵的阳光生成能力和豌豆射手的攻击特性的向日葵豌豆射手&#xff0c;以及拥有寒冰豌豆射…

CesiumJS【Basic】- #019 加载glb/gltf文件(Entity方式)

文章目录 加载glb/gltf文件(Entity方式)1 目标2 代码实现3 资源文件加载glb/gltf文件(Entity方式) 1 目标 使用Entity方式加载glb/gltf文件 2 代码实现 import * as Cesium from "cesium";const viewer = new Cesium.Viewer

武汉高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的不断进步和工业4.0的深入推进&#xff0c;智能制造已成为现代工业发展的重要方向。在这一背景下&#xff0c;武汉高校大学智能制造实验室积极响应国家号召&#xff0c;致力于将先进的数字孪生技术与智能制造教育相结合&#xff0c;打造了一个集教学、实训、科研于一体…

SyntaxError: Unexpected token ‘??=‘

前端运行报错&#xff1a; globalThis.GLOBAL_NX_VERSION ?? GLOBAL_NX_VERSION;^^^SyntaxError: Unexpected token ??解决&#xff1a; 检查node版本 node -v当前使用的是14.21.3的版本&#xff0c;切换到一个16.0.0以上的版本即可&#xff0c;推荐使用nvm管理node版本 …

基于java + Springboot 的二手物品交易平台实现

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统架构 &#x1f4da; 数据库设计 &#x1f4da; 系统功能的具体实现 &#x1f4ac; 登录模块 首页模块 二手商品轮播图添加 &#x1f4ac; 后台功能模块 二手商品商品列表 添加二手商品商品 添加购物车 &a…

llama-3 本地化部署实验

国产大模型的API 有限&#xff0c;编写langchain 应用问题很多。使用openai 总是遇到网络问题&#xff0c;尝试使用ollama在本地运行llama-3。结果异常简单。效果不错。llama-3 的推理能力感觉比openai 的GPT-3.5 好。 Ollama 下载 官网&#xff1a;https://ollama.com/downl…

电子看板,实现生产现场数字化管理

如何提高生产效率、优化资源配置、保障产品质量&#xff0c;成为企业在激烈竞争中脱颖而出的关键。电子看板作为一种创新的生产管理工具&#xff0c;为实现生产现场数字化管理提供了有力支持。电子看板是生产现场的“智能窗口”&#xff0c;它能够实时、准确地展示各类关键信息…

马蹄集 oj赛(双周赛第二十九次)

目录 供水管线 附庸的附庸 逆序 队列安排 管理通讯簿 调整队伍 泡泡 一元多项式的加法 约瑟夫环 暧昧团 快排变形 采蜜 供水管线 难度:钻石● 时间限制:1秒巴: 占用内存:128 M 在几个城市之间原本要规划修建许多条下水管道&#xff0c;管理人员发现这些管道会形成一…

Mind+在线图形编程软件(Sractch类软件)

Scratch作为图形编程软件&#xff0c;可以为小朋友学习编程提供很好的入门&#xff0c;是初次接触编程的小朋友的首选开发软件。这里介绍的Mind软件与Sractch用法几乎完全一致&#xff0c;并且可以提供在线免安装版本使用&#xff0c;浏览器直接打开网址&#xff1a; ide.mindp…

从零开始做一辆简易麦克纳姆轮小车

一、前期准备 麦克纳姆轮小车&#xff08;Mecanum wheel robot&#xff09;是一种能够实现全向移动的机器人&#xff0c;其核心在于使用了特殊设计的麦克纳姆轮。要从头开始制作一辆麦克纳姆轮小车&#xff0c;你可能需要准备以下组件和工具&#xff1a; 1. 材料和部件 麦克纳…

uniApp获取实时定位

通过你获取的key放到项目manifest.json里面&#xff0c;对应填写你所需要的key值&#xff0c;还有高德用户名 用户名&#xff1a; key值的位置&#xff1a; 代码&#xff1a; html: <view class"intList pdNone"><view class"label">详细地…

fpga bitstream userid

fpga version register # xdc 文件 set_property BITSTREAM.CONFIG.USERID "0xDEADC0DE" [current_design] set_property BITSTREAM.CONFIG.USR_ACCESS 0x66669999 [current_design]ug908 在bit下载之后的property可以看到 &#xff0c;GUI里面Tools → Edit Devic…

链动2+1奖金制度|2+1玩法走人留人机制|电商分销模式

用这个链动21模式&#xff0c;半年清空42万瓶白酒库存&#xff0c;还帮你迅速搭建个人团队。 这是一次彻底的玩法拆解&#xff0c;一步步教你如何用这个模式实现销量和收益双提高&#xff01; 链动21模式是当前裂变会员发展速度最快的一种方式&#xff0c;它具备合理合规的身份…