文件上传—阿里云OSS对象存储

目录

一、OSS简介

二、OSS基本使用

1. 注册账号

2. 基本配置

(1) 开通OSS

(2) 创建存储空间

(3) 修改权限

(4) 配置完成,上传一张图片,检验是否成功。 

(5) 创建AccessKey

三、Java项目集成OSS

1. 导入依赖

2. Result.java代码:

3. 引入OSS上传文件工具类 AliOSSUtils.java

3. UploadController: 

4. 使用postman对接口进行测试


一、OSS简介

阿里云的对象存储服务(Object Storage Service,简称OSS)提供了一个网络平台,用于数据的存储和访问。通过OSS,我们能够随时在网络上存储和检索包括文本、图像、音频和视频在内的多种非结构化数据文件。在OSS中,数据文件被作为对象存储于称作存储空间(bucket)的容器中。

以下是OSS支持的主要功能:

  1. 创建存储空间:用户可以创建一个或多个存储空间,并在每个存储空间中上传文件。

  2. 文件上传与管理:用户能够将文件上传至指定的存储空间,并进行相应的管理操作。

  3. 文件共享与下载:用户可以通过获取已上传文件的URL地址来实现文件的共享和下载。

  4. 设置访问权限:用户可以调整存储空间或文件的属性和元数据,以设定相应的访问权限。

  5. 管理控制台操作:用户可以在阿里云的管理控制台中执行OSS的基本和高级任务。

  6. API调用:用户可以利用阿里云的开发工具包或直接通过RESTful API在应用程序中执行OSS的基本和高级操作。

二、OSS基本使用

1. 注册账号

打开 阿里云-计算,为了无法计算的价值,申请阿里云账号并完成实名认证

2. 基本配置

(1) 开通OSS

登录成功之后,点击右上角“控制台”

鼠标放在左上角三条横杠处,点击“对象存储”,打开OSS产品详情页面。在OSS产品详情页中的单击立即开通。

开通服务后,单击官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单击左侧的对象存储OSS菜单进入 OSS管理控制台。

(2) 创建存储空间

新建Bucket,自定义名称,地域随便选,读写权限默认私有,创建完成后改为公共读。
按照图中选,其他默认就行,都是不开通或者关闭。

(3) 修改权限

完成创建之后,进入创建好的Bucket,点击左侧列表“权限控制”—“阻止公共访问”,关闭“阻止公共访问”,接下来按步骤走。

 接下来,点击“读写权限”—“设置”,选择“公共读”,按步骤走即可。

(4) 配置完成,上传一张图片,检验是否成功。 

“文件列表”—“上传文件”—“扫描文件” —选择一个文件 —“上传文件”

 

点击“详情”,进行下载

下载成功,则说明访问成功 !

(5) 创建AccessKey

鼠标移动到头像处,点击“AccessKey”。

点击“我确认...”—“继续使用”—“创建AccessKey”

 继续使用即可。

 创建完成就获得了AccessKey

三、Java项目集成OSS

参考官方文档:OSS Java SDK快速入门_对象存储(OSS)-阿里云帮助中心

1. 导入依赖

在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。以在<dependencies>中加入3.17.4版本的依赖为例:

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>

如果使用的是Java 9及以上的版本,则需要添加以下JAXB相关依赖:

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

2. Result.java代码:

package com.qcby.model;public class Result<T> {private int code;private String message;private T data;private Result(int code, String message, T data) {this.code = code;this.message = message;this.data = data;}public static <T> Result<T> success(T data) {return new Result<>(200, "操作成功", data);}public static <T> Result<T> failure(int code, String message) {return new Result<>(code, message, null);}// Getters and Setterspublic int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getData() {return data;}public void setData(T data) {this.data = data;}
}

3. 引入OSS上传文件工具类 AliOSSUtils.java

package com.qcby.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;@Component
public class AliOSSUtils {private String endpoint = "自己的";private String accessKeyId = "自己的";private String accessKeySecret = "自己的";private String bucketName = "自己的";/*** 实现上传图片到OSS*/public String upload(MultipartFile multipartFile) throws IOException {// 获取上传的文件的输入流InputStream inputStream = multipartFile.getInputStream();// 避免文件覆盖String originalFilename = multipartFile.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}
}

3. UploadController: 

package com.qcby.controller;import com.qcby.model.Result;
import com.qcby.utils.AliOSSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;@Controller
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@ResponseBody@RequestMapping("/upload")public Result upload(MultipartFile image) throws IOException {//调用阿里云OSS工具类,将上传上来的文件存入阿里云String url = aliOSSUtils.upload(image);//将图片上传完成后的url返回,用于浏览器回显展示return Result.success(url);}
}

4. 使用postman对接口进行测试

  • 切换到 “Body”(正文)选项卡。
  • 选择 “form-data” 作为正文类型。
  • 在 “VALUE” 列中,使用选择文件按钮上传你想要测试的文件。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极米投影仪-看电视

文章目录 前言操作步骤1.进入GitHub下载软件2.修改后缀3.粘贴到U盘 前言 使用网络提供的电视接口免费看电视。 操作步骤 1.进入GitHub下载软件 地址&#xff1a;https://github.com/andandroidor/ourtv 也可以直接下载我已保存的apk&#xff0c;地址&#xff1a;https://d…

重生之我在异世界学编程之C语言:深入文件操作篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 函数递归与迭代 引言正文一、文件的基本操作&#…

Rust HTTP请求库

GITHUB 地址 LTPP-GIT 地址 接口文档 说明 http-request 是一个轻量级、高效的库&#xff0c;用于在 Rust 应用程序中构建、发送和处理 HTTP/HTTPS 请求。它提供了一个简单直观的 API&#xff0c;使开发人员可以轻松地与使用 “HTTP” 或 “HTTPS” 协议的 Web 服务进行交互…

ERC论文阅读(03)--instructERC论文阅读笔记(2024-12-14)

instructERC论文阅读笔记 2024-12-14 论文题目&#xff1a;InstructERC: Reforming Emotion Recognition in Conversation with Multi-task Retrieval-Augmented Large Language Models 说明&#xff1a;以下内容纯属本人看论文及复现代码的记录&#xff0c;如想了解论文细节&…

uniapp - 微信小程序

一、background-image 大图不显示的问题 解决方法&#xff1a; 1、使用网络地址&#xff1b;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

MongoDB-ObjectID 生成器

前言 MongoDB中一个非常关键的概念就是 ObjectID&#xff0c;它是 MongoDB 中每个文档的默认唯一标识符。了解 ObjectID 的生成机制不仅有助于开发人员优化数据库性能&#xff0c;还能帮助更好地理解 MongoDB 的设计理念。 什么是 MongoDB ObjectID&#xff1f; 在 MongoDB …

[笔记]Qt下使用SendMessage、PostMessage和接收window消息

1.头文件和库引用 首先必须要包含windows.h这个头文件&#xff0c;如果使用一些扩展函数&#xff0c;还需要包含windowsx.h。网上说使用FindWindow要添加头文件winuser.h&#xff0c;不过应该windows.h是自动包含这个依赖的&#xff08;我没有添加&#xff09; #include <…

SSM 架构下的垃圾分类系统,开启绿色生活

第1章 概述 1.1 研究背景 随着现代网络技术发展&#xff0c;对于垃圾分类系统现在正处于网络发展的阶段&#xff0c;所以对它的要求也是比较严格的&#xff0c;要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式&#xff0c;依靠网络技术的的快速发展和现代通讯…

【大语言模型】LangChain 核心模块介绍(Agents)

【大语言模型】LangChain 核心模块介绍&#xff08;Agents&#xff09; 一、简介二、Agents 的核心概念三、实战案例3.1、需求说明3.2、实现思路3.3、完整源码 一、简介 我们都知道四肢的绝大部分动作都是由大脑决定的&#xff0c;大脑通过中枢神经下发自己的操作指令&#xf…

某名校考研自命题C++程序设计——近10年真题汇总(上)

本帖更新一些某校的编程真题&#xff0c;总体来说不难&#xff0c;考察的都是基本功&#xff0c;92高校大一期末的难度&#xff0c;不过有些细节颇为繁琐&#xff0c;各位还是需要一定程度上注意的~ 目录 一.分数求和 二.大小写字母转换 三.判断当年天序 四.交替合并字符串…

Hadoop其一,介绍本地模式,伪分布模式和全分布搭建

目录 一、Hadoop介绍 二、HDFS的本地模式 三、伪分布模式 四、Hdfs中的shell命令 五、全分布搭建 六、使用Java代码操作HDFS 1、环境准备 2、单元测试&#xff08;Junit&#xff09;​编辑 一、Hadoop介绍 Hadoop 分为三部分 &#xff1a; Common、HDFS 、Yarn、MapRe…

C#速成(GID+图形编程)

常用类 类说明Brush填充图形形状,画刷GraphicsGDI绘图画面&#xff0c;无法继承Pen定义绘制的对象直线等&#xff08;颜色&#xff0c;粗细&#xff09;Font定义文本格式&#xff08;字体&#xff0c;字号&#xff09; 常用结构 结构说明Color颜色Point在平面中定义点Rectan…

【STM32 Modbus编程】-作为从设备读取保持-输入寄存器

作为从设备读取保持-输入寄存器 文章目录 作为从设备读取保持-输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备1.4 STM32基础代码准备2、读取保持寄存器3、读取输入寄存器在本文中,我们将STM32单片作为ModBus的从设备,实现保持寄存器和输入寄存…

简单的多网卡选择指定网卡ip注册

简单的多网卡选择指定网卡ip注册 我们公司服务器上面有多个网卡&#xff0c;多网卡则本地ip有多个ip,我们启动服务的时候需要选定他特定的ip&#xff0c;我们服务需要特定的ip进行注册&#xff0c;才能进行正常的通讯功能&#xff0c;我们需要使用如下配置进行特定ip选择&…

泷羽sec-burp(6)暴力破解与验证码识别绕过(下,验证码识别绕过0) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

spark如何自定义函数

UDF&#xff1a;一对一的函数【User Defined Functions】 substr、split、concat、instr、length、from_unixtime UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 count、sum、max、min、avg、collect_set/list UDTF&#xff1a;一对多的函…

Python高性能web框架-FastApi教程:(2)路径操作装饰器方法

路径操作装饰器方法 1. fastapi支持的各种请求方式 app.get() app.post() app.put() app.patch() app.delete() app.options() app.head() app.trace()2. 定义不同请求方式的路由 # 定义GET请求的路由 app.get(/get) def get_test():return {method: get方法} app.get(/get)…

Python知识分享第二十七天-贪心算法

贪心算法 什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 这么说有点抽象&#xff0c;来举一个例子&#xff1a; 例如&#xff0c;有一堆钞票&#xff0c;允许你拿走十张&#xff0c;如果想达到最大的金额&#xff0c;你要怎么拿&#xff1f;…

网络安全之信息收集

域名扫描工具 oneforall 特点&#xff1a;相对较慢&#xff0c;相对较全&#xff0c;误报率高 subDomainsBrute 2、服务器信息收集 pin 域名 网站归属信息ip138.com CDN 内容分发网络 绕过cdn访问真实ip方法&#xff1a; &#xff08;1&#xff09;超级ping 使用所在全…

NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法

论文速读|Transforming and Combining Rewards for Aligning Large Language Models 论文信息&#xff1a; 简介&#xff1a; 本文探讨了如何使大型语言模型&#xff08;LLMs&#xff09;与人类偏好对齐。传统的对齐方法是先从偏好数据中学习一个奖励模型&#xff0c;然后使用这…