1.依赖jar
<!-- 阿里云对象存储 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.2</version>
</dependency>
2.封装的工具类
package com.xiaolc.util;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.PutObjectResult;
/**
* @author lc
* @create 2019-03-28 14:12
* @ClassName OSSUtil
**/
public class OSSUtil {
/**
* @return OSSClient oss客户端
* @throws
* @Title: getOSSClient
* @Description: 获取oss客户端
*/
public static OSSClient getOSSClient() {
//使用你的对应的endpoint地址
String endpoint = "http://oss-cn-shanghai.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "";
String accessKeySecret = "";
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
return ossClient;
}
/**
* @param ossClient oss客户端
* @param url URL
* @param bucketName bucket名称
* @param objectName 上传文件目录和(包括文件名)例如“test/index.html”
* @return void 返回类型
* @throws
* @Title: uploadByNetworkStream
* @Description: 通过网络流上传文件
*/
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();
}
}
}
/**
* @param ossClient oss客户端
* @param inputStream 输入流
* @param bucketName bucket名称
* @param objectName 上传文件目录和(包括文件名) 例如“test/a.jpg”
* @return void 返回类型
* @param catalog 文件上传目录
* @throws
* @Title: uploadByInputStream
* @Description: 通过输入流上传文件
*/
public static void uploadByInputStream(OSSClient ossClient, InputStream inputStream, String bucketName,
String objectName, String catalog) {
try {
ossClient.putObject(bucketName, catalog + "/" + objectName, inputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
/**
* @param ossClient oss客户端
* @param file 上传的文件
* @param bucketName bucket名称
* @param objectName 文件名称 例如“a.jpg”
* @param catalog 文件上传目录
* @return void 返回类型
* @throws
* @Title: uploadByFile
* @Description: 通过file上传文件
*/
public static void uploadByFile(OSSClient ossClient, File file, String bucketName, String objectName, String catalog) {
try {
ossClient.putObject(bucketName, catalog + "/" + objectName, file);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
/**
* @param ossClient oss客户端
* @param bucketName bucket名称
* @param key 文件路径/名称,例如“test/a.txt”
* @return void 返回类型
* @throws
* @Title: deleteFile
* @Description: 根据key删除oss服务器上的文件
*/
public static void deleteFile(OSSClient ossClient, String bucketName, String key) {
ossClient.deleteObject(bucketName, key);
}
/**
* @param ossClient oss客户端
* @param bucketName bucket名称
* @param key 文件路径和名称
* @return InputStream 文件输入流
* @throws
* @Title: getInputStreamByOSS
* @Description:根据key获取服务器上的文件的输入流
*/
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;
}
/**
* @param ossClient oss客户端
* @param bucketName bucket名称
* @return List<String> 文件路径和大小集合
* @throws
* @Title: queryAllObject
* @Description: 查询某个bucket里面的所有文件
*/
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;
}
public static String genImageName() {
//取当前时间的长整形值包含毫秒
long millis = System.currentTimeMillis();
//long millis = System.nanoTime();
//加上三位随机数
Random random = new Random();
int end3 = random.nextInt(999);
//如果不足三位前面补0
String str = millis + String.format("%03d", end3);
return str;
}
/**
* 获取上传地址
*
* @param bucketName
* @param filename
* @param catalog
* @return
*/
public static String url(String bucketName, String filename, String catalog) {
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
//返回文件url地址
String u = getOSSClient().generatePresignedUrl(bucketName, catalog + "/" + filename, expiration).toString();
return u.substring(0, u.indexOf("?"));
}
}
3.测试
package com.xiaolc;
import com.aliyun.oss.OSSClient;
import com.xiaolc.util.OSSUtil;
import org.junit.Test;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.List;
/**
* @author lc
* @create 2019-03-28 14:16
* @ClassName OSSUtilTest
**/
public class OSSUtilTest {
private OSSClient ossClient = OSSUtil.getOSSClient();
private String bucketName = "xiaolc-2";
@Test
public void testUploadByNetworkStream() {
//测试通过网络流上传文件
try {
URL url = new URL("https://www.aliyun.com/");
OSSUtil.uploadByNetworkStream(ossClient, url, bucketName, "test/aliyun.html");
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
String u = ossClient.generatePresignedUrl(bucketName, "test/aliyun.html", expiration).toString();
System.out.println(u.substring(0, u.indexOf("?")));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@Test
public void testUploadByInputStream() {
//文件存储目录不用加/
String catalog = "test";
//测试通过输入流上传文件
File file = new File("D:/applicationContext.xml");
try {
InputStream inputStream = new FileInputStream(file);
String filename = OSSUtil.genImageName()+file.getName();
OSSUtil.uploadByInputStream(ossClient, inputStream, bucketName, filename,catalog);
String url = OSSUtil.url(bucketName, filename, catalog);
System.out.println(url);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testUploadByFile() {
//文件存储目录不用加/
String catalog = "test";
//测试通过file上传文件
File file = new File("D:/1.jpg");
//文件名称
String filename = OSSUtil.genImageName() + file.getName();
//上传
OSSUtil.uploadByFile(ossClient, file, bucketName, filename,catalog);
//获取文件url
String url = OSSUtil.url(bucketName, filename,catalog);
System.out.println(url);
}
@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);
}
}
4.源代码链接
https://github.com/qpdyg/aly.git