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

embedded/2024/12/19 16:15:14/

目录

一、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.ppmy.cn/embedded/147060.html

相关文章

如何将多张图片合并为一个pdf?多张图片合并成一个PDF文件的方法

如何将多张图片合并为一个pdf&#xff1f;当我们需要将多张图片合并为一个PDF文件时&#xff0c;通常是因为我们希望将这些图片整理成一个统一的文档&#xff0c;方便查看、分享或打印。无论是工作中需要提交的报告、学生们需要整理的作业&#xff0c;还是个人收藏的照片、旅行…

【Excel】单元格分列

目录 分列&#xff08;新手友好&#xff09; 1. 选中需要分列的单元格后&#xff0c;选择 【数据】选项卡下的【分列】功能。 2. 按照分列向导提示选择适合的分列方式。 3. 分好就是这个样子 智能分列&#xff08;进阶&#xff09; 高级分列 Tips&#xff1a; 新手推荐基…

java: 无效的目标发行版: 9或警告: 源发行版 9 需要目标发行版 9

idea启动Java项目报错: java: 无效的目标发行版: 9 警告: 源发行版 9 需要目标发行版 9 ReformAlertRulesController has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes clas…

C/S软件授权注册系统-轻量级WebApi服务器介绍

CS软件授权注册系统-WebApi服务器介绍 目录 WebApi服务器框架 WebApi服务器技术实现技术栈VS解决方案 Project项目说明 依赖包依赖程序集WebApi接口清单 管理员工具api接口&#xff08;Swagger OpenApi&#xff09;授权服务器api接口WebApplication 介绍 WebApi服务器框架 …

qt 类中的run线程

在Qt中&#xff0c;QThread类的run()方法是线程的执行入口&#xff0c;它是由QThread内部自动调用的&#xff0c;而不是用户直接调用。 详细解释&#xff1a; QThread类&#xff1a; QThread是Qt的线程类&#xff0c;提供了用于多线程操作的接口。我们可以创建QThread对象并将…

常耀斌:深度学习和大模型原理与实战(深度好文)

目录 机器学习 深度学习 Transformer大模型架构 人工神经元网络 卷积神经网络 深度学习是革命性的技术成果&#xff0c;有利推动了计算机视觉、自然语言处理、语音识别、强化学习和统计建模的快速发展。 深度学习在计算机视觉领域上&#xff0c;发展突飞猛进&#xff0c;…

【ETCD】ETCD 架构揭秘:内部各组件概览

ETCD 的主要组件及它们之间的关联关系如下&#xff1a; 目录 1. Client&#xff08;客户端&#xff09;2. gRPC 接口3. Etcd Server Main Loop&#xff08;ETCD 主循环&#xff09;4. Raft&#xff08;共识模块&#xff09;5. Peer Etcd Nodes&#xff08;ETCD 集群节点&#x…

Git简介和特点

目录 一、Git简介 二、Git特点 1.集中式和分布式 (1)集中式版本控制系统 (2)分布式版本控制系统 2.版本存储方式的差异 (1)直接记录快照&#xff0c;而非差异比较 3.近乎所有操作都是本地执行 一、Git简介 Git是目前世界上最先进的的分布式控制系统&#xff08;没有之一…