Java封装阿里云对象存储OSS

版权声明:文章为本人原创, 转载请注明出处(fxyh97.com), 以及作者(fxyh) https://blog.csdn.net/qq_37872792/article/details/81542674

欢迎大家来我的个人博客:https://www.fxyh97.com/index.php/archives/69/

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
华东 1 oss-cn-hangzhou oss-cn-hangzhou.aliyuncs.com
华东 2 oss-cn-shanghai oss-cn-shanghai.aliyuncs.com
华北 1 oss-cn-qingdao oss-cn-qingdao.aliyuncs.com
华北 2 oss-cn-beijing oss-cn-beijing.aliyuncs.com
华北 3 oss-cn-zhangjiakou oss-cn-zhangjiakou.aliyuncs.com
华北 5 oss-cn-huhehaote oss-cn-huhehaote.aliyuncs.com
华南 1 oss-cn-shenzhen oss-cn-shenzhen.aliyuncs.com
香港 oss-cn-hongkong oss-cn-hongkong.aliyuncs.com
美国西部 1 (硅谷) oss-us-west-1 oss-us-west-1.aliyuncs.com
美国东部 1 (弗吉尼亚) oss-us-east-1 oss-us-east-1.aliyuncs.com
亚太东南 1 (新加坡) oss-ap-southeast-1 oss-ap-southeast-1.aliyuncs.com
亚太东南 2 (悉尼) oss-ap-southeast-2 oss-ap-southeast-2.aliyuncs.com
亚太东南 3 (吉隆坡) oss-ap-southeast-3 oss-ap-southeast-3.aliyuncs.com
亚太东南 5 (雅加达) oss-ap-southeast-5 oss-ap-southeast-5.aliyuncs.com
亚太东北 1 (日本) oss-ap-northeast-1 oss-ap-northeast-1.aliyuncs.com
亚太南部 1 (孟买) oss-ap-south-1 oss-ap-south-1.aliyuncs.com
欧洲中部 1 (法兰克福) oss-eu-central-1 oss-eu-central-1.aliyuncs.com
中东东部 1 (迪拜) oss-me-east-1 oss-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";
	
	@Test
	public void testUploadByNetworkStream(){
		//测试通过网络流上传文件
		try {
			URL url = new URL("https://www.aliyun.com/");
			OSSUtil.uploadByNetworkStream(ossClient, url, bucketName, "test/aliyun.html");
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public 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();
		}
	}
	
	@Test
	public void testUploadByFile(){
		//测试通过file上传文件 
		File file = new File("D:/applicationContext.xml");
		OSSUtil.uploadByFile(ossClient, file, bucketName, "test/applicationContext.xml");
	}

	@Test
	public void testDeleteFile(){
		//测试根据key删除oss服务器上的文件
		OSSUtil.deleteFile(ossClient, bucketName, "test/a.xml");
	}
	
	@Test
	public 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();
		}
	}
	
	@Test
	public 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

猜你喜欢

转载自blog.csdn.net/qq_37872792/article/details/81542674