Java封装阿里云对象存储OSS

article/2025/11/7 7:07:43

Java封装阿里云对象存储OSS

阿里云对象存储OSS官网

本篇博客简单封装了阿里云的OSS存储中的建立连接;本地文件,输入流和URL三种方式上传文件,获取文件的输入流,删除文件,获取所有文件列表等功能。

OSS官方Api

OSSpom:

<!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss -->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.2</version>
</dependency>

SDK下载地址:Aliyun OSS SDK For Java

sdk下载

sdk下载

注:Endpoint是指你的oss是那个地域的,每个地域的OSS对应不同的网址。下面是OSS开通Region和Endpoint对照表

Region中文名称Region英文表示外网Endpoint
华东 1oss-cn-hangzhouoss-cn-hangzhou.aliyuncs.com
华东 2oss-cn-shanghaioss-cn-shanghai.aliyuncs.com
华北 1oss-cn-qingdaooss-cn-qingdao.aliyuncs.com
华北 2oss-cn-beijingoss-cn-beijing.aliyuncs.com
华北 3oss-cn-zhangjiakouoss-cn-zhangjiakou.aliyuncs.com
华北 5oss-cn-huhehaoteoss-cn-huhehaote.aliyuncs.com
华南 1oss-cn-shenzhenoss-cn-shenzhen.aliyuncs.com
香港oss-cn-hongkongoss-cn-hongkong.aliyuncs.com
美国西部 1 (硅谷)oss-us-west-1oss-us-west-1.aliyuncs.com
美国东部 1 (弗吉尼亚)oss-us-east-1oss-us-east-1.aliyuncs.com
亚太东南 1 (新加坡)oss-ap-southeast-1oss-ap-southeast-1.aliyuncs.com
亚太东南 2 (悉尼)oss-ap-southeast-2oss-ap-southeast-2.aliyuncs.com
亚太东南 3 (吉隆坡)oss-ap-southeast-3oss-ap-southeast-3.aliyuncs.com
亚太东南 5 (雅加达)oss-ap-southeast-5oss-ap-southeast-5.aliyuncs.com
亚太东北 1 (日本)oss-ap-northeast-1oss-ap-northeast-1.aliyuncs.com
亚太南部 1 (孟买)oss-ap-south-1oss-ap-south-1.aliyuncs.com
欧洲中部 1 (法兰克福)oss-eu-central-1oss-eu-central-1.aliyuncs.com
中东东部 1 (迪拜)oss-me-east-1oss-me-east-1.aliyuncs.com

另外一种获取方法,在你的控制台的对象存储里面选择你的bucket,概览里面有访问域名也就是Endpoint,如图:

获取Endpoint

从控制台上创建子用户和获取AccessKeyId和AccessKeySecret

04

05

06

07

08

09

如果已经有子用户的则在点击开始使用子用户,但是忘记了Accesskey的secret的时候,直接把弹出层关闭就可以了

10

11

12

下面开始正菜了!!!

OSSUtil代码

package com.fxyh.util;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;public class OSSUtil {/*** * @Title: getOSSClient * @Description: 获取oss客户端 * @return OSSClient oss客户端 * @throws*/public static OSSClient getOSSClient() {//使用你的对应的endpoint地址String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。String accessKeyId = "你的accessKeyId";String accessKeySecret = "你的accessKeySecret";OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);return ossClient;}/*** * @Title: uploadByNetworkStream * @Description: 通过网络流上传文件* @param ossClient 	oss客户端 * @param url 			URL * @param bucketName 	bucket名称 * @param objectName 	上传文件目录和(包括文件名)例如“test/index.html” * @return void 		返回类型* @throws*/public static void uploadByNetworkStream(OSSClient ossClient, URL url, String bucketName, String objectName) {try {InputStream inputStream = url.openStream();ossClient.putObject(bucketName, objectName, inputStream);ossClient.shutdown();} catch (IOException e) {e.printStackTrace();} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** * @Title: uploadByInputStream * @Description: 通过输入流上传文件* @param ossClient 	oss客户端 * @param inputStream 	输入流 * @param bucketName 	bucket名称* @param objectName 	上传文件目录和(包括文件名) 例如“test/a.jpg” * @return void 		返回类型 * @throws*/public static void uploadByInputStream(OSSClient ossClient, InputStream inputStream, String bucketName,String objectName) {try {ossClient.putObject(bucketName, objectName, inputStream);} catch (Exception e) {e.printStackTrace();} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** * @Title: uploadByFile * @Description: 通过file上传文件 * @param ossClient 	oss客户端 * @param file 			上传的文件 * @param bucketName 	bucket名称* @param objectName 	上传文件目录和(包括文件名) 例如“test/a.jpg” * @return void 		返回类型* @throws*/public static void uploadByFile(OSSClient ossClient, File file, String bucketName, String objectName) {try {ossClient.putObject(bucketName, objectName, file);} catch (Exception e) {e.printStackTrace();} finally {if (ossClient != null) {ossClient.shutdown();}}}/*** * @Title: deleteFile  * @Description: 根据key删除oss服务器上的文件* @param ossClient		oss客户端 * @param bucketName		bucket名称 * @param key    		文件路径/名称,例如“test/a.txt”  * @return void    		返回类型  * @throws*/public static void deleteFile(OSSClient ossClient, String bucketName, String key) {ossClient.deleteObject(bucketName, key);}/*** * @Title: getInputStreamByOSS * @Description:根据key获取服务器上的文件的输入流 * @param ossClient 	oss客户端  * @param bucketName 	bucket名称 * @param key 			文件路径和名称 * @return InputStream 	文件输入流* @throws*/public static InputStream getInputStreamByOSS(OSSClient ossClient, String bucketName, String key) {InputStream content = null;try {OSSObject ossObj = ossClient.getObject(bucketName, key);content = ossObj.getObjectContent();} catch (Exception e) {e.printStackTrace();} return content;}/*** * @Title: queryAllObject  * @Description: 查询某个bucket里面的所有文件* @param ossClient		oss客户端* @param bucketName		bucket名称* @return List<String>  文件路径和大小集合  * @throws*/public static List<String> queryAllObject(OSSClient ossClient, String bucketName) {List<String> results = new ArrayList<String>();try {// ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。ObjectListing objectListing = ossClient.listObjects(bucketName);// objectListing.getObjectSummaries获取所有文件的描述信息。for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {results.add(" - " + objectSummary.getKey() + "  " + "(size = " + objectSummary.getSize() + ")");}} catch (Exception e) {e.printStackTrace();} finally {if (ossClient != null) {ossClient.shutdown();}}return results;}
}

测试代码

junit pom:

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>
package com.fxyh.test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;import org.junit.Test;import com.aliyun.oss.OSSClient;
import com.fxyh.util.OSSUtil;public class OSSUtilTest {private OSSClient ossClient = OSSUtil.getOSSClient();private String bucketName = "你的bucketName";@Testpublic void testUploadByNetworkStream(){//测试通过网络流上传文件try {URL url = new URL("https://www.aliyun.com/");OSSUtil.uploadByNetworkStream(ossClient, url, bucketName, "test/aliyun.html");} catch (MalformedURLException e) {e.printStackTrace();}}@Testpublic void testUploadByInputStream(){//测试通过输入流上传文件try {InputStream inputStream = new FileInputStream(new File("D:/applicationContext.xml"));OSSUtil.uploadByInputStream(ossClient, inputStream, bucketName, "test/a.xml");} catch (Exception e) {e.printStackTrace();}}@Testpublic void testUploadByFile(){//测试通过file上传文件 File file = new File("D:/applicationContext.xml");OSSUtil.uploadByFile(ossClient, file, bucketName, "test/applicationContext.xml");}@Testpublic void testDeleteFile(){//测试根据key删除oss服务器上的文件OSSUtil.deleteFile(ossClient, bucketName, "test/a.xml");}@Testpublic void testGetInputStreamByOSS(){//测试根据key获取服务器上的文件的输入流 try {InputStream content = OSSUtil.getInputStreamByOSS(ossClient, bucketName, "test/applicationContext.xml");if (content != null) {BufferedReader reader = new BufferedReader(new InputStreamReader(content));while (true) {String line = reader.readLine();if (line == null) break;System.out.println("\n" + line);}// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。content.close();}} catch (Exception e) {e.printStackTrace();}}@Testpublic void testQueryAllObject(){//测试查询某个bucket里面的所有文件List<String> results = OSSUtil.queryAllObject(OSSUtil.getOSSClient(), bucketName);System.out.println(results);}}

运行截图如下:13

14

15

16

17

18

19

20

访问公共读权限的文件

21

22

附:OSSUtil项目源码

链接:https://pan.baidu.com/s/1ijcD7YXAMAI9lSrFhBwnqg 密码:fhxt


http://chatgpt.dhexx.cn/article/gRgCkQRG.shtml

相关文章

java 枚举 封装操作方法

前言&#xff1a; 由于刚转java项目&#xff0c;所以对于java语言比较陌生&#xff0c;尤其是lambda和一些诸如&#xff08;一个java文件只能有一个public class&#xff09;等等的零散知识点之类。。。 使我觉得就语言的层级来说。.net真的超越java不是一星半点。奈何.net跨…

Java封装和封装的案例

Java封装和封装的案例 目录 一、Java封装知识点简介 二、Java程序中的包 三、static关键字、代码块 四、封装的综合应用案例&#xff1a; 一、Java封装知识点简介 1、面向对象三大特性之封装的概念&#xff1a; 隐藏类的某些内部细节&#xff0c;不允许外部程序直接访问…

Java的封装方法

在面向对象程式设计方法中&#xff0c;封装&#xff08;英文名称&#xff1a;Encapsulation&#xff09;是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障&#xff0c;防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的…

Java封装如何封装 封装的好处是什么?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、封装的作用是什么&#xff1f;二、封装的好处三、封装的步骤 1.引入库2.private的应用总结 前言 我要看电视&#xff0c;只需要按一下开关和换台就可以了。…

15、JAVA入门——封装

目录 一、封装 1、封装概述 2、封装的步骤 二、Java里的包 1、包的概述 2、包的定义 3、包的使用 4、注意事项 三、Java访问修饰符 1、类和类成员的访问控制 2、类的访问修饰符 3、类成员的访问修饰符 四、static关键字 1、static特点 2、static修饰属性 3、static修饰方法 4、…

初学java封装

封装 初识java封装 封装的用处&#xff1a; 1.提高程序的安全性&#xff0c;保护数据 2.隐藏代码的实现细节 3.统一接口 4.增加系统可维护性 这里创建一个类 public class Package {//属性私有private String name;//名字private int age; //年龄private int sex;//性别//1.…

java如何实现封装_java如何实现封装

Java中类的封装是如何实现的封装是将对象的信息隐藏在对象内部,禁止外部程序直接访问对象内部的属性和方法。 java封装类通过三个步骤实现: (1)修改属性的可见性,限制访问。 (2)设置属性的读取方法。 (3)在读取属性的方法中,添加对属性读取的限制。 Java中什么叫封装呢? 继…

java封装dll文件_java类封装成dll

1&#xff0c;建立测试类&#xff0c;注意英文注释部分&#xff0c;用汉语直接编译会乱码 public classHello {//native method is used for call other language procedure//if use chinese here then Compile would be gibberish public native voidprintHello();static{ Sys…

java之封装

1.封装 1. 封装 1.1 private关键字 private是一个修饰符&#xff0c;可以用来修饰成员&#xff08;成员变量&#xff0c;成员方法&#xff09; 被private修饰的成员&#xff0c;只能在本类进行访问&#xff0c;针对private修饰的成员变量&#xff0c;如果需要被其他类使用&…

【JavaScript】js中非常常见的面试题

文章目录 1、手动实现防抖和节流2、let、const、var 的区别3、箭头函数与普通函数区别4、Promise5、数据类型6、检测数据类型的常用方法1 .typeof2 . instanceof3 .constructor4 . 使用 Object.prototype.toString.call()检测对象类型⭐5 . 自己封装函数6、isArray 7、数组的常…

JS的100道经典面试题(一)只看这四篇就够了,收藏起来以后偷偷看

年轻人你不讲武德&#xff0c;耗子尾汁~~~ 总结就是为了形成自己的js知识网&#xff0c;提升自己&#xff0c;加油&#xff01; 开始干 1、介绍js的基本数据类型   答&#xff1a; Undefined、Null、Boolean、Number、String 2、js有哪些内置对象&#xff1f;  答&…

大前端JS部分基础面试题(含答案)

1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型&#xff1a;Undefined、Null、Boolean、Number、String 值类型&#xff1a;数值、布尔值、null、undefined。 引用类型&#xff1a;对象、数组、函数。 堆栈数据结构&#xff1a;是一种支…

Js面试题__附答案

1、什么是JavaScript&#xff1f;&#xff08;这是基本题&#xff0c;对很多程序员来说也是送分题&#xff01;&#xff09; JavaScript是客户端和服务器端脚本语言&#xff0c;可以插入到HTML页面中&#xff0c;并且是目前较热门的Web开发语言。同时&#xff0c;JavaScript也…

js 变量及作用域经典面试题

function Foo() {getName function () { alert (1); };return this; } Foo.getName function () { alert (2);}; Foo.prototype.getName function () { alert (3);}; var getName function () { alert (4);}; function getName() { alert (5);}//请写出以下输出结果&#x…

前端面试题集锦——JavaScript

JavaScript 栈和队列的区别? 栈的插入和删除操作都是在一端进行的&#xff0c;而队列的操作却是在两端进行的。 队列先进先出&#xff0c;栈先进后出。 栈只允许在表尾一端进行插入和删除&#xff0c;而队列只允许在表尾一端进行插入&#xff0c;在表头一端进行删除 栈和…

收集的面试题 js面试题

题库推荐网址&#xff1a;https://github.com/FEGuideTeam/FEGuide/tree/master/javascript%E9%97%AE%E9%A2%98 第1题: ## JavaScript 由以下三部分组成&#xff1a;1. ECMAScript&#xff08;核心&#xff09;&#xff1a;JavaScript 语言基础2. DOM&#xff08;文档对象模…

JS闭包+常见面试题

scope作用域 、Closure闭包对象 可以借助chrome调式工具查看闭包对象 注意&#xff1a;function声明存在变量提升&#xff0c;所以22行已经存在闭包对象了&#xff1b; 闭包产生的条件&#xff1a; 函数嵌套&#xff1b;嵌套的内部函数引用了外部函数的变量才会产生闭包对象…

前端面试题汇总(含答案)(JS篇)

主要自用&#xff0c;持续更新&#xff0c;相同类型的题目尽量放在了一起&#xff0c;参考的实在太多了就没有列出&#xff0c;侵权烦请联系删除。提示&#xff1a;自动生成的目录在页面右边---------->>>>>>>>>>>>>>>> Js的…

前端面试题(js篇)

1.解释一下什么是闭包 什么是闭包&#xff1a;函数使用了不属于自己的局部变量(函数套函数&#xff0c;里面函数使用了外面函数定义的变量) 闭包的作用&#xff1a;避免全局污染 闭包的缺点&#xff1a;使用过多会造成内存泄漏&#xff08;占用的内存释放不掉&#xff09; 2.…

js 实现页面隐藏、关闭、刷新给出对应的提示

我们在做项目的时候经常会遇到一些需求&#xff0c;比如在某些页面当点击浏览器刷新 或者关闭的时候会有对应的提示&#xff0c;是否离开或者重新加载此网站。比如csdn写文章的时候就有这个弹窗&#xff0c;这功能就是用onbeforeunload实现的。 注意&#xff1a;如果你加载下面…